2015-04-03 27 views
38

L'oggetto statics funziona con classi ES6 in React?Statica di reazione con classi ES6

class SomeComponent extends React.Component { 

    render() { 
    // ... 
    } 

} 

React.statics = { 
    someMethod: function() { 
    //... 
    } 
}; 

Qualcosa di simile a quanto sopra mi dà metodo non definito someMethod quando faccio SomeComponent.someMethod()

risposta

50

statics funziona solo con React.createClass. Basta dichiarare il metodo come un metodo di classe statica:

class SomeComponent extends React.Component { 

    static someMethod() { 
    //... 
    } 

    render() { 
    // ... 
    } 

} 

Per quanto riguarda

React.statics = { ... } 

Si sono letteralmente creando una proprietà statics sull'oggetto React. Questa proprietà non magicamente estendere il componente.

+2

Si noti che le proprietà statiche (ad esempio 'static propTypes = {...}') sono supportate da babel e dagli strumenti jsx; ma sono solo una proposta ES7. I metodi statici sono ES6. – FakeRainBrigand

+0

in questo modo ottengo sempre "Impossibile leggere la proprietà" _currentElement "di errore null' mentre gli stessi metodi senza modificatore statico funzionano correttamente. Non sto usando alcuna variabile di classe nei miei metodi ... – abimelex

-5

statics funziona solo per Reagire componenti, check docs.

+4

L'OP non ha un componente reattivo? –

+1

Questa è esattamente la tua risposta. Cos'è OP? – Roman

+1

"OP" si riferisce alla domanda o alla persona che ha scritto la domanda. Forse l'hai appena detto un po 'stranamente, perché questo è sicuramente un componente React. Non è stato creato con 'React.createClass'. –

21

Sebbene statics funzioni solo per React.createClass, è ancora possibile scrivere metodi statici nella notazione ES6. Se si utilizza ES7, è anche possibile scrivere proprietà statiche.

È possibile scrivere statica all'interno ES6 + classi in questo modo:

class Component extends React.Component { 
    static propTypes = { 
    ... 
    } 

    static someMethod(){ 
    } 
} 

o all'esterno della classe come questa:

class Component extends React.Component { 
    .... 
} 

Component.propTypes = {...} 
Component.someMethod = function(){....} 

Se si vuole scrivere, come il primo, allora dovete impostare stage: 0 su Babel (dal momento che è sperimentale).

+1

Si noti che 'propTypes = ...' non è una notazione ES6. – Bergi

+1

Sei corretto, sembra essere la notazione di inizializzazione proprietà ES7. http://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#es7-property-initializers –

+3

Per poter usare ES7 devi 'npm installare babel -preset-stage-0' e quindi aggiungi '" stage-0 "' a .babelrc in questo modo: '{" preset ": [" es2015 "," react "," stage-0 "]}' – emisilva

Problemi correlati