2015-10-31 12 views
65

sto Tring la sintassi ES6 in Reagire, e scrivere i componenti come:classe estende React.Component non può utilizzare getInitialState in Reagire

export default class Loginform extends React.Component { 
    getInitialState() { 
     return { 
      name: '', 
      password: '' 
     }; 
    }; 
} 

ma il browser mi butta un Waring su:

Avviso: getInitialState è stato definito su Loginform, una semplice classe JavaScript . Questo è supportato solo per le classi create usando React.createClass. Intendevi invece definire una proprietà di stato?

Posso gestirlo con la sintassi tradizionale var Loginform = React.createClass ma qual è la sintassi ES6 corretta?

Un'altra piccola cosa, penso che nella sintassi tradizionale React.createClass è un oggetto, in modo che le funzioni in esso è separato da virgola, ma con la classe extends essa richiede e virgola, non capisco bene.

+0

Eventuali duplicati di [Perché getInitialState non viene chiamato per la mia classe React?] (http://stackoverflow.com/questions/31709258/why-is-getinitialstate-not-being-called-for-my-react-class) –

+0

@FelixKling sicuro. spiacente –

risposta

134

Non è necessario il punto e virgola o la virgola tra le dichiarazioni del metodo di classe ES6.

Per le classi ES6, getInitialState è stato deprecato in favore di dichiarare un oggetto stato iniziale nel costruttore:

export default class Loginform extends React.Component { 
    constructor(props, context) { 
    super(props, context); 

    this.state = { 
     name: '', 
     password: '' 
    }; 
    }; 
} 
+0

Con questo, quando 'console.log (this.state.name)', genera un errore su 'Impossibile leggere la proprietà 'stato' di null' –

+4

Dove stai provando a chiamarlo? Nelle classi ES6 'questo 'non viene automaticamente associato, il che potrebbe essere parte del problema: https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html #autobinding – max

+0

sì, funziona, grazie, accettato! –

3

ES6 esempio: stato, defaultProps, propTypes

import React from 'react' 
import ReactDom from 'react-dom'; 
export default class Item extends React.Component{ 
    constructor(props){ 
     super(props); 
     this.state = { 
      check:false, 
     }; 
     this.click=this.click.bind(this); 
    } 
    click(){ 
     this.setState({check:true}); 
    } 
    render(){ 
     const text=this.state.check?'yes':'no'; 
     return(<div onClick={this.click}>{this.props.name} : <b>{text}</b></div>) 
    } 

} 

Item.defaultProps={ 
    comment:"default comment", 
}; 
Item.propTypes={ 
    name:React.PropTypes.string.isRequired, 
}; 
Problemi correlati