- Supposons que j'ai une classe React P, qui rend deux classes enfants, C1 et C2.
- C1 contient un champ de saisie. Je ferai référence à ce champ de saisie comme Foo.
- Mon objectif est de laisser C2 réagir aux changements de Foo.
J'ai trouvé deux solutions, mais aucune d'elles ne semble tout à fait correcte.
Première solution:
- Assigner un état P,
state.input
. - Créez une
onChange
fonction dans P, qui prend un événement et définitstate.input
. - Passez ceci
onChange
à C1 en tant que aprops
, et laissez C1 se lierthis.props.onChange
auonChange
de Foo.
Cela marche. Chaque fois que la valeur de Foo change, il déclenche a setState
dans P, donc P aura l'entrée pour passer à C2.
Mais cela ne me semble pas tout à fait correct pour la même raison: je définis l'état d'un élément parent à partir d'un élément enfant. Cela semble trahir le principe de conception de React: un flux de données unidirectionnel.
Est-ce ainsi que je suis censé le faire, ou y a-t-il une solution plus naturelle de React?
Deuxième solution:
Mettez simplement Foo dans P.
Mais est-ce un principe de conception que je devrais suivre lorsque je structure mon application, en plaçant tous les éléments du formulaire dans la render
classe de niveau le plus élevé?
Comme dans mon exemple, si j'ai un grand rendu de C1, je ne veux vraiment pas mettre l'ensemble render
de C1 à render
de P simplement parce que C1 a un élément de formulaire.
Comment dois-je le faire?