2017-06-10 11 views
1

Was ist der Unterschied zwischen diesen beiden Möglichkeiten, den Anfangszustand in ES6 neben dem Zugriff auf die Requisiten festzulegen?Initialisierungsstatus im Konstruktor im Vergleich zum Status

constructor(props) { 
    super(props); 

    this.state = { 
     highlighted: 5, 
     backgroundColor: '#f3f3f3', 
    } 
} 

vs:

state = { 
     highlighted: 5, 
     backgroundColor: '#f3f3f3', 
    } 
+0

nicht sicher, wie es für Sie kompiliert. In dem Moment schreibe ich 'state = { hervorgehoben: 5, backgroundColor: '# f3f3f3', }' innerhalb einer Klasse (nicht in einer Konstruktormethode) in meiner Jsx-Datei bekomme ich einen Kompilierungsfehler - 'Unexpected token' zeigt auf das '=' Zeichen nach dem Zustand. Fehle ich etwas an meinem Ende? Das erste Code-Snippet ist vollkommen in Ordnung. – RBT

Antwort

3

Erstere nur Syntax Suger für die letztere, so Zugriff auf Konstruktorargumente ist wirklich der einzige Unterschied.

This is how it gets transpiled by Babel nur babel-preset-stage-2 Preset mit der vorgeschlagenen Klasseneigenschaften Syntax zu handhaben:

class Example { 
    state = { 
    highlighted: 5, 
    backgroundColor: '#f3f3f3', 
    } 
} 

Ausgang:

class Example { 
    constructor() { 
    this.state = { 
     highlighted: 5, 
     backgroundColor: '#f3f3f3' 
    }; 
    } 
} 

Dies ist auch deshalb eine Funktion unter Verwendung einer Klasse Eigenschaft Pfeil Funktion bindet erklärt es zu der Instanz.

It gets moved into the constructor, wobei der this Wert, den die Pfeilfunktion bewahrt, die neue Instanz ist.

class Example { 
    boundFunction =() => { 
    // ... 
    } 
} 

Ausgang:

class Example { 
    constructor() { 
    this.boundFunction =() => { 
     // ... 
    }; 
    } 
} 
+0

In der zweiten Syntax, die OP verwendet hat, kann er 'this.props' nicht verwenden, während eine der Eigenschaften 'marked' oder' backgroundColor' im Objekt gesetzt wird? – RBT

Verwandte Themen