Je travaille avec un objet d'état profondément imbriqué dans React. Ma base de code impose que nous essayions de nous en tenir aux composants de fonction et donc, chaque fois que je veux mettre à jour une paire clé/valeur à l'intérieur de cet objet imbriqué, je dois utiliser un hook pour définir l'état. Cependant, je n'arrive pas à accéder aux éléments imbriqués les plus profonds. J'ai un menu déroulant avec un gestionnaire onChange . .à l'intérieur du gestionnaire onChange, il y a une fonction en ligne pour directement définir la valeur de la paire clé/valeur qui change.
Cependant, la syntaxe que j'utilise après l'opérateur d'étalement dans chaque fonction inline est erronée.
Comme solution de rechange, j'ai eu recours à la factorisation de la fonction en ligne en sa propre fonction qui réécrit l'objet d'état entier chaque fois que l'état change, mais cela prend beaucoup de temps et est très laid. Je préférerais le faire en ligne comme ci-dessous :
const [stateObject, setStateObject] = useState({
top_level_prop: [
{
nestedProp1: "nestVal1",
nestedProp2: "nestVal2"
nestedProp3: "nestVal3",
nestedProp4: [
{
deepNestProp1: "deepNestedVal1",
deepNestProp2: "deepNestedVal2"
}
]
}
]
});
<h3>Top Level Prop</h3>
<span>NestedProp1:</span>
<select
id="nested-prop1-selector"
value={stateObject.top_level_prop[0].nestedProp1}
onChange={e => setStateObject({...stateObject,
top_level_prop[0].nestedProp1: e.target.value})}
>
<option value="nestVal1">nestVal1</option>
<option value="nestVal2">nestVal2</option>
<option value="nestVal3">nestVal3</option>
</select>
<h3>Nested Prop 4</h3>
<span>Deep Nest Prop 1:</span>
<select
id="deep-nested-prop-1-selector"
value={stateObject.top_level_prop[0].nestprop4[0].deepNestProp1}
onChange={e => setStateObject({...stateObject,
top_level_prop[0].nestedProp4[0].deepNestProp1: e.target.value})}
>
<option value="deepNestVal1">deepNestVal1</option>
<option value="deepNestVal2">deepNestVal2</option>
<option value="deepNestVal3">deepNestVal3</option>
</select>
Le résultat du code ci-dessus me donne un "nestProp1" et "deepNestProp1" indéfinis, vraisemblablement parce qu'ils ne sont jamais atteints/ont leur état modifié par chaque sélecteur. Le résultat que je souhaite obtenir est que l'option sélectionnée corresponde à la valeur de la valeur actuelle du sélecteur (après les changements d'état). Toute aide serait grandement appréciée.