Bonjour,
Petite question pour ceux qui dev en react.
J'ai un Component C, qui a 3 enfants : C1, C2, C3.
Ces 3 enfants utilisent une même fonction doSomething() avec les mêmes paramètres fournis en props, du coup je désire la deplacer dans le component parent afin de la faire passer en tant que props, et ainsi éviter de dupliquer le code.
Le souci est que dans cette fonction commune, les child components créent des states de manière dynamique en utilisant des variables, exemple pour un bouton :
this.setState({[`${var}-button`] : value}
Ceci en bouclant sur une liste de valeurs dans le cadre de la création d'un tableau, et chaque ligne de ce tableau a un bouton (entre autres) que je dois pouvoir repérer de manière individuelle.
Cela marche bien lorsque chacunes de ces fonctions est dans son component attitré.
Grace a une enum, je n'ai pas de mal a refacto la méthode pour la placer dans le component parent et savoir ainsi quel enfant est concerné lors de la création du "state" : par exemple l'enfant appel this.props.doSomething(childConcerned, var);
Ce qui peut donc donner comme création : this.setState({[`${childConcerned}-${var}-button`] : value} . Ainsi je saurai peux toujours les differencier.
Le souci est : comment je fais pour faire passer ces "states" crées de manières dynamique au component child correspondant ? Puisqu'a la base, je ne sais pas combien ont été créés ni même leurs noms, cela dépend des valeurs qui seront traitées.
J'ai pensé a 2 options :
- faire passer tout l'objet "this.state" du parent vers l'enfant, mais du coup les enfants auraient accès à des props qui ne les concerne pas, cela agrandi le risque d'erreur a l'avenir
- laisser la méthode dupliquée dans les 3 component, pas fan mais peut-être plus sûr.
Je n'ai pas d'autre solution en tête pour le moment. Je suis pas très doué en JS (encore moins en react) donc il y a peut-être des options que je ne connais pas.
Désolé si c'est pas très clair, j'écris ça sur mobile donc j'ai fais au mieux (la sécurité de mon pc au taf m'empêche de venir sur jvc..)
Merci pour vos conseils et suggestions, si c'est pas assez clair j'essayerai d'éclaircir