0
votes

Changer l'état sans remplacer les autres valeurs dans réagir

J'essaie de changer l'état de mon application sans remplacer les valeurs qui n'ont pas changé. Je le fais en utilisant l'opérateur de la propagation, mais quelque chose ne va pas.

Voici mon état de base: usestate ({Data: [{nom: non défini, projet: []}]}); code> p>

avec SETState Code> Je veux juste ajouter des noms mais garder le tableau de projet vide car il n'a pas changé. p> xxx pré>

après avoir effectué le système d'instate, le nouvel état ressemble à ceci: P>

[
  {name: "john doe"},
  {name: "jane doe"}
] 


1 commentaires

Propagation fait une fusion peu profonde. Voir Comment faire de la fusion profonde au lieu de fusion peu profonde?


3 Réponses :


1
votes

par SetManager (prevstate => ({... prevstate, données: res.data})) code> Vous remplacez simplement votre garde de bienvenue "principale" data ​​code> .

DATA CODE> est une matrice, de nouvelles valeurs sont en tableau ... Simplement concat code> p> xxx pré>

après que vous devriez avoir p> xxx pré>

... mais vous vouliez probablement gérer les noms et projeter séparément: p>

setManager(prevState => ({
  ...prevState, 
  name : prevState.name.concat( res.data )
}))


0 commentaires

1
votes

Probablement ce dont vous avez besoin est la suivante:

const [manager, setManager] = useState([{ name: undefined, project: [] }]);

setManager(prevState =>
  prevState.data.map((item, index) => ({ ...item, ...res.data[index] }))
);


0 commentaires

1
votes

Vous avez inité votre état avec un tableau strong>, pas un objet, c'est la raison du comportement.

Changez ceci de p>

useState({data : {name : undefined , project : []} });


0 commentaires