Ich überprüfe die ES6-Syntax in React und schreibe die Komponenten wie folgt:
export default class Loginform extends React.Component {
getInitialState() {
return {
name: '',
password: ''
};
};
}
aber der Browser wirft mir eine Warnung vor:
Warnung: getInitialState wurde in Loginform definiert, einer einfachen JavaScript-Klasse. Dies wird nur für Klassen unterstützt, die mit React.createClass erstellt wurden. Wollten Sie stattdessen eine Staatseigenschaft definieren?
Ich kann mit der traditionellen Syntax umgehen, var Loginform = React.createClass
aber was ist die richtige ES6-Syntax?
Eine andere Kleinigkeit, denke ich, ist in der traditionellen Syntax React.createClass
ein Objekt, daher sind die Funktionen darin durch Komma getrennt, aber mit der extends
Klasse, für die ein Semikolon erforderlich ist, verstehe ich es nicht gut.
Antworten:
Sie benötigen keine Semikolons oder Kommas zwischen ES6-Klassenmethodendeklarationen.
Wurde für ES6-Klassen
getInitialState
zugunsten der Deklaration eines Anfangszustandsobjekts im Konstruktor veraltet:export default class Loginform extends React.Component { constructor(props, context) { super(props, context); this.state = { name: '', password: '' }; }; }
quelle
console.log(this.state.name)
, wirft es einen Fehler überCannot read property 'state' of null
this
nicht automatisch gebunden, was Teil des Problems sein könnte: facebook.github.io/react/blog/2015/01/27/…createClass
Funktionalität war, dass Ihre Methoden automatisch an eine Komponenteninstanz gebunden wurden. Dies bedeutete beispielsweise, dass innerhalb eines Klicks ein Rückrufthis
an die Komponente gebunden wurde. Mit der Umstellung auf ES6-Klassen Das React-Team empfiehlt, die Bindung im Konstruktor vorzubindenES6-Beispiel: state, 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, };
quelle
Wenn wir ein Klassenfeld verwenden, funktioniert Folgendes.
state = { name: '', password: '' }
Dies kann anstelle von verwendet werden
constructor(props, context) { super(props, context); this.state = { name: '', password: '' }; };
quelle