2016-08-27 7 views
6

Więc po prostu pobrać kod źródłowy z ram zareagować, a ja dostaję ten błąd w Terminalu:Dlaczego ustawić stan komponentu React poza konstruktorem?

ERROR in ./src/components/TextEditor.js 
    Module build failed: SyntaxError: Unexpected token (24:8) 

    22 | 
    23 | // Set the initial state when the app is first constructed. 
> 24 | state = { 
    |  ^
    25 |  state: initialState 
    26 | } 
    27 | 

Moje pytanie brzmi, dlaczego ludzie ustawić React stan komponentu tak? Jakie korzyści przyniesie to niektórym osobom błąd? Czy istnieje ustawienie wstępne Babel lub wtyczka, którą mogę uzyskać, aby zapobiec temu błędowi?

To jest jak zwykle ustawiony stan danego składnika, iz tego co widziałem, to konwencjonalny:

constructor() { 
    super(); 
    this.state = { 
    state: initialState 
    }; 
} 

Dla przypomnienia, jest to cały dokument:

// Import React! 
import React from 'react' 
import {Editor, Raw} from 'slate' 

const initialState = Raw.deserialize({ 
    nodes: [ 
    { 
     kind: 'block', 
     type: 'paragraph', 
     nodes: [ 
     { 
      kind: 'text', 
      text: 'A line of text in a paragraph.' 
     } 
     ] 
    } 
    ] 
}, { terse: true }) 

// Define our app... 
export default class TextEditor extends React.Component { 

    // Set the initial state when the app is first constructed. 
    state = { 
    state: initialState 
    } 

    // On change, update the app's React state with the new editor state. 
    render() { 
    return (
     <Editor 
     state={this.state.state} 
     onChange={state => this.setState({ state })} 
     /> 
    ) 
    } 

} 

Odpowiedz

8

Pierwszym przykładem jest użycie właściwości klasy, która nie jest częścią specyfikacji ES6. Możesz ich używać z babel za pomocą zestawu ustawień stage-2 lub babel-plugin-transform-class-properties.

Użycie jest w większości kwestią preferencji i da taki sam wynik, jak drugi przykład przy transpozycji za pomocą babel.

https://babeljs.io/repl/#?evaluate=true&lineWrap=false&presets=react%2Cstage-0&experimental=false&loose=false&spec=false&code=%2F%2F%20Code%20goes%20here%0Aclass%20First%20%7B%0A%20%20state%20%3D%20%7B%0A%20%20%20%20value%3A%20true%0A%20%20%7D%0A%7D%3B%0A%0Aclass%20Second%20%7B%0A%20%20constructor%20()%20%7B%0A%20%20%20%20this.state%20%3D%20%7B%0A%20%20%20%20%20%20value%3A%20true%0A%20%20%20%20%7D%3B%0A%20%20%7D%0A%7D%3B%0A