2017-02-02 5 views
0

Ich habe zwei Dateien: User.js und Login.js. Nach erfolgreichem Login möchte ich die statische logIn Methode der Benutzerklasse aufrufen. Ich habe seltsames Verhalten. Was mache ich falsch?Wie erstellt man eine Klasse in einem es6 Modul und importiert sie in ein anderes?

Dateiinhalt User.js:

// user/User.js 

// I also tried export default class User 
export class User { 
    static logIn (token) { 
    } 

    static logOut (token) { 
    } 

    static isAuthorized() { 
    } 
} 

Und Login.js:

// login/Login.js 

import React from 'react'; 
import GoogleLogin from 'react-google-login'; 
// I also tried import User from './../user/User'; 
// I also tried import {User} from './../user/User'; 
import * as User from './../user/User'; 

class Login extends React.Component { 

    constructor (props, context) { 
    super(props, context); 
    } 

    responseSuccess (googleUser) { 
    const idToken = googleUser.getAuthResponse().id_token; 
    User.logIn(idToken); 
    } 

/// 

} 

export default Login; 

Wenn ich Import verwenden und exportieren diese Weise kann ich dieses Verhalten bekommen: enter image description here

So, Benutzer ist ein Objekt mit Eigenschaft User. Diese Eigenschaft enthält alle Methoden der Klasse Benutzer.

Ist es möglich, irgendwie Klasse zu exportieren/importieren, damit ich Benutzerklassenmethoden in User Objekt bekomme?

Jetzt gibt es nur eine Möglichkeit, Methoden zu verwenden: User.User.logIn().

+0

Wenn Sie sagen, 'import * als von ', wenn sagt „alle der Exporte aus der Datei übernehmen‚x‘und sammeln sie in einem Objekt und exportieren Sie das Objekt als ". Sollte funktionieren, wenn Sie Ihre Import-Anweisung einfach auf 'Benutzer importieren von './../ user/User' ändern, da die Klasse Ihr Standard-Export ist. –

+0

Ja, das ist eine logische Erklärung. Ich verstehe es. Das Problem, dass es nicht funktioniert ... Ich habe auch versucht, 'Benutzer importieren' ./../ Benutzer/Benutzer '', ich habe gerade eine der Varianten dort hinzugefügt. –

+0

Das Beispiel und der Screenshot zeigen einen anderen Code. – zeroflagL

Antwort

5

Sie verwenden einen Standardexport, so dass Sie bei einem Namespace-Import (* as User) User.default verwenden müssen, um auf die Klasse zuzugreifen.

Verwenden Sie stattdessen eine Standard-Import:

import User from './../user/User'; 

jedoch Ihr Screenshot lässt vermuten, dass Sie tatsächlich einen benannten Export mit export class User { … }, kein Standard-Export zu tun. Wenn Sie das verwenden möchten, sollten Sie den Namen importieren müssen:

import {User} from './../user/User'; // short for {User as User} 

Das heißt, Sie wahrscheinlich shouldn't be using a class nur aus statischen Methoden sowieso. mehrere benannte Exporte verwenden

export function logIn(token) { 
} 
export function logOut(token) { 
} 
export function isAuthorized() { 
} 

und verwenden Sie dann den Namespace Import

import * as User from './../user/User'; 

zuzugreifen, sie als User.logIn usw.

+0

Wie soll ich die Klasse exportieren? Ich bekomme das im Moment: https://i.gyazo.com/0ef0f54c0cf87699ee638fd7c7f389f3.png. Ich habe den Export der Klasse nicht geändert. Ich habe versucht, die Klasse folgendermaßen zu exportieren: 'export class User' und' export default class User' –

+0

Ja, ich habe verschiedene Varianten ausprobiert und bin verwirrt. –

+1

Ich habe 'export class User' und' import {User} von './../ user/User' ausprobiert. Ich bekomme jetzt VM16149: 1 Uncaught ReferenceError: Benutzer ist nicht definiert. –

1

Da Sie eine Standard-Export verwenden, gibt es keine Notwendigkeit zu geben ein Alias ​​über as.

Verwenden Sie stattdessen die folgende Syntax, um den Standard Export des Moduls zu importieren:

import User from './../user/User'; 

Mehr Infos in the MDN docs.

+0

Ich habe das versucht. Dies funktioniert nicht. Wie soll Export aussehen? –

+0

Ich habe Links zu github.com hinzugefügt. Können Sie Dateiinhalte überprüfen? Sieht komisch aus. –

0

importieren Benutzer von './ ../ Benutzer/Benutzer ';

sollte genug sein, müssen Sie nicht aus dieser Datei mehr exportierten Werte haben

Verwandte Themen