2017-04-19 3 views
0

Learning Reaktion, und ich bin auf der Suche über MaterialUI docs Google, und es zeigt eine Syntax, die wie folgt aussieht:Was ist diese JavaScript ES6 Syntax?

export default class DialogExampleModal extends React.Component { 
    state = { 
    open: false, 
    }; 

    handleOpen =() => { 
    this.setState({open: true}); 
    }; 
... 

Babel mit es2015 auf dem state = Teil dieser Code Fehler:

ERROR in ./client/App.jsx 
Module build failed: SyntaxError: Unexpected token (23:8) 

    21 | } 
    22 | 
> 23 | state = { 
    |  ^
    24 |  open: false, 
    25 | }; 
    26 | 

Meine Frage ist, was ist diese Syntax und habe ich etwas möglicherweise falsch konfiguriert? Es scheint, dass andere ES2015-Syntax gut funktioniert.

+0

Sie fehlen ein Semikolon in Zeile 21. – cdhowie

Antwort

2

Ich glaube, Sie müssen entweder einstellen Klasse Eigenschaften innerhalb des Konstruktors wie folgt aus:

export default class DialogExampleModal extends React.Component { 

    constructor() { 
    this.state = { 
     open: false, 
    }; 

    this.handleOpen =() => { 
     this.setState({open: true}); 
    }; 
    } 

} 

oder können Sie transform-class-properties babel-Plugin verwenden, Code aus Ihrer Frage Kompilierung zu machen.

+0

transform-class-properties ist das fehlende Plugin. – Krum

+0

Man beachte, dass ich die Lösung mit Konstruktor gezeigt habe, bevor ich "transform-class-properties" erwähnte, da 'transform-class-properties' derzeit (April 2017) nur ein [Vorschlag in Stufe 2] (https://github.com) ist/tc39/prospect-class-public-fields) - diese Syntax ist also überhaupt nicht stabil. Es ist vollkommen in Ordnung, es im Tutorial zu verwenden, aber Sie könnten darüber nachdenken, bevor Sie es in einem Produktionscode verwenden. Auch Sie sollten die Antworten aufwerten, die Sie mögen. – TeWu

0

Nun, die erste Sache, die zu mir springt, ist, dass der Beispielcode eine offene geschweifte Klammer hat, bevor der Zustandscode und Ihre hat eine schließende Klammer.

export default class DialogExampleModal extends React.Component { // HERE 
    state = { // HERE 
    open: false, 
    }; 

    handleOpen =() => { 
    this.setState({open: true}); 
    }; 

und Ihre Unterstützung:

21 | } // HERE 
    22 | 
> 23 | state = { 

Wenn Sie die Komponente vor der Zustandsfunktion schließen, wird es einen Fehler aus, weil es sich um eine nicht definierte Funktion ist, wird sie nicht außerhalb der Komponente zu erwarten.

Wenn das eine andere Funktion innerhalb der Komponente ist, benötigen Sie ein Semikolon danach.

21 | }; // SEMICOLON HERE 
    22 | 
> 23 | state = {