Réagir: pourquoi composant enfant n'est pas mise à jour lorsque des changements prop
Pourquoi, dans le pseudo-code de l'exemple de l'Enfant n'a pas re-rendre lorsque des modifications au Conteneur de 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 je l'appelle forceUpdate()
après modification de la valeur dans un Récipient, Enfant affiche toujours l'ancienne valeur.
- Est-ce votre code? On dirait que c'est pas valide Réagir code
- Je pense que les accessoires de la valeur ne devrait pas changer dans un conteneur de composant au lieu de cela, il devrait être modifié dans le composant parent par setState et que l'état doit être la carte pour conteneurs accessoires
Vous devez vous connecter pour publier un commentaire.
Parce que les enfants ne sont pas rerender si les accessoires de la modification du parent, mais si son ÉTAT change 🙂
Ce que vous montrer, c'est ceci:
https://facebook.github.io/react/tips/communicate-between-components.html
Il va passer des données à partir d'un parent à l'enfant à travers des accessoires, mais il n'y a pas de rerender logique.
Vous devez définir un certain état de la mère puis rerender l'enfant sur les parents changent d'état.
Cela pourrait aider.
https://facebook.github.io/react/tips/expose-component-functions.html
Mise à jour de l'enfant de l'attribut 'clé' qui est égale à son nom. La composante sera de nouveau rendu à chaque fois que la clé de changements.
Selon Réagir philosophie composant ne peut pas changer ses accessoires. ils doivent être reçus de la part du parent et doit être immuable. Seul parent peut changer les accessoires de ses enfants.
belle explication sur état vs accessoires
aussi, lire ce fil Pourquoi ne puis-je pas de mise à jour des accessoires react.js?
J'ai eu le même problème.
C'est ma solution, je ne suis pas sûr que c'est la bonne pratique, dites-moi si ce n':
UPD: Maintenant, vous pouvez faire la même chose à l'aide de Réagir Crochets:
(uniquement si le composant est une fonction)
Vous devez utiliser
setState
fonction. Si non, l'état ne sera pas enregistrer vos modifications, peu importe la façon dont vous utilisez forceUpdate.Votre code ne semble pas valide. Je ne peux pas tester ce code.
<Child bar={this.state.foo.bar} />
?Utiliser le setState fonction.
Donc, vous pourriez faire
l'intérieur de la poignée de la méthode événement.
Une fois, l'état est mis à jour, il sera le déclencheur de changements, et de rendre à nouveau se tiendra.
Vous devriez probablement faire de l'Enfant en tant que composante fonctionnelle si elle n'a pas d'état et simplement rend les accessoires et ensuite appeler à partir du parent. Alternative à cela est que vous pouvez utiliser des crochets avec la composante fonctionnelle (useState) qui va provoquer des apatrides composant de re-rendre.
Aussi, vous ne devez pas modifier le propas comme ils sont immuables. Conserver l'état du composant.