Réagir setState entre les composants ES6
J'ai une application très simple où je suis en train de mettre à jour l'état d'un composant parent d'un enfant de composant comme suit:
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>
);
}
}
L'erreur que je reçois est this.setState is not a function
et je ne peux pas savoir pourquoi. Toute aide serait grandement appréciée!
- Assurez-vous que vous n'êtes pas accidentellement la mutation
this.setState
ailleurs. c'est à dire:this.setState = { foo: 'bar' };
- Juste remarquer le
../../..
... assurez-vous que le chemin d'accès relatif des séjours au sein de votre projet, autrement déplacer le projet (téléchargement à distance, l'affichage sur github / mnp, peu importe) pourraient briser ces chemins. - Vous pouvez vouloir reconsidérer la hiérarchie du projet
- La façon dont vous êtes l'importation de Réagir est très... décevant.
- Il fonctionne avec la dernière version de Réagir: jsfiddle.net/1uh9e8wx
Vous devez vous connecter pour publier un commentaire.
this
n'est pas auto-lié dans l'ES6 la syntaxe de style.Soit:
this.func = this.func.bind(this)
func = () => {};
Plus ici: https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding
handleStateClick = { this.handleStateClick.bind(this) }
.Utilisation
() =>
lambda pour fournir une portée lexicale et lier la valeur correcte de ce à l'intérieur de la méthodehandleStateClick()
: