Reagieren setState zwischen den Komponenten ES6
Habe ich eine sehr einfache Anwendung, wo ich bin versucht, zu aktualisieren, den Status einer übergeordneten Komponente aus einer Kind-Komponente wie folgt:
import React from '../../../../../../../dependencies/node_modules/react';
import ReactDOM from '../../../../../../../dependencies/node_modules/react-dom';
class CalendarMain extends React.Component {
constructor() {
super();
}
handleClick() {
this.props.handleStateClick("State Changed");
}
render() {
return (
<div>
<div className="calendar">
{this.props.checkIn}
<button onClick={ this.handleClick.bind(this) }>Click Me</button>
</div>
</div>
)
}
}
class CalendarApp extends React.Component {
constructor() {
super();
this.state = {
checkIn: "Check-in",
checkOut: "Check-out",
dateSelected: false
};
}
handleStateClick( newState ) {
this.setState({
checkIn: newState
});
}
render() {
return (
<div>
<CalendarMain
checkIn = { this.state.checkIn }
handleStateClick = { this.handleStateClick.bind(this) }
/>
</div>
);
}
}
Die Fehler ich erhalte, ist this.setState is not a function
und ich kann nicht herausfinden, warum. Jede Hilfe wäre sehr geschätzt werden!
- Stellen Sie sicher, dass Sie nicht versehentlich mutiert
this.setState
anderswo. ie:this.setState = { foo: 'bar' };
- Nur bemerken die
../../..
... stellen Sie sicher, dass der relative Pfad bleibt in Ihrem Projekt, ansonsten verschieben des Projekts (Upload auf remote, die Veröffentlichung auf github / npm, was auch immer) brechen könnte diese Pfade. - Möchten Sie vielleicht überdenken Sie Ihre Projekt-Hierarchie
- Die Art und Weise, die Sie importieren, Reagieren, ist sehr... enttäuschend.
- Es funktioniert tatsächlich mit der neuesten version von React: jsfiddle.net/1uh9e8wx
Du musst angemeldet sein, um einen Kommentar abzugeben.
this
ist nicht automatisch verpflichtet, in ES6-Stil-syntax.Entweder:
this.func = this.func.bind(this)
func = () => {};
Mehr hier: https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding
handleStateClick = { this.handleStateClick.bind(this) }
.Verwenden
() =>
lambda zu bieten lexikalischen scoping und binden korrekte Wert dieser innerhalb der MethodehandleStateClick()
: