Pourquoi, dans l'exemple de pseudo-code suivant, l'enfant ne redémarre pas lorsque le conteneur change foo.bar?
Container { handleEvent() { this.props.foo.bar = 123 }, render() { return <Child bar={this.props.foo.bar} /> } Child { render() { return <div>{this.props.bar}</div> } }
Même si j'appelle forceUpdate()
après avoir modifié la valeur dans Container, Child affiche encore l'ancienne valeur.
Parce que l'enfant ne redémarre pas si les accessoires du parent changent mais si l'ETAT change 🙂
Ce que vous affichez est ceci: https://facebook.github.io/react/tips/communicate-between-components.html
Il passera des données de parent à enfant par des accessoires, mais il n'y a pas de logique de rerender ici.
Vous devez définir un état sur le parent puis rerender l'enfant sur l'état de changement parent. Cela pourrait vous aider. https://facebook.github.io/react/tips/expose-component-functions.html
Selon le composant React philosophie, il ne peut pas changer ses accessoires. Ils devraient être reçus du parent et devraient être immuables. Seul le parent peut changer les accessoires de ses enfants.
Belle explication sur l' état et les accessoires
Aussi, lisez ce sujet Pourquoi je ne peux pas mettre à jour les accessoires dans react.js?
Utilisez la fonction setState. Donc, vous pourriez faire
this.setState({this.state.foo.bar:123})
À l'intérieur de la méthode d'événement de la poignée.
Une fois, l'état est mis à jour, il déclenchera des changements et le re-rendu aura lieu.
Vous devez utiliser la fonction setState
.
Container { handleEvent= () => { // use arrow function //this.props.foo.bar = 123 //You should use setState to set value like this: this.setState({foo: {bar: 123}}); }; render() { return <Child bar={this.state.foo.bar} /> } Child { render() { return <div>{this.props.bar}</div> } } }
Votre code semble pas valide. Je ne peux pas tester ce code.