J'essaie d'ajouter un tableau et un objet à un tableau.

C'est mon constructeur

const [dashboard, setDashboard] = useState({ loading: true, data: [], address: '' })

Et c'est comme ça que je voulais que les données finissent

{
   loading: true,
   data: [{id: 0, name: 'A'}, {id: 1, name: 'B'}],
   address: 'xxx'
}

Je n'arrive pas à le comprendre et j'ai seulement réussi à ajouter les tableaux mais pas les autres objets comme loading et address avec quelque chose comme ça mais ce n'est pas ce dont j'ai besoin et je ' Je donne juste un exemple de ce que j'ai essayé de faire :

Le constructeur de celui-ci en bas est différent de ce que je veux utiliser, j'ai utilisé quelque chose comme ça

const [dashboard, setDashboard] = useState([])

setDashboard((prev) => {
   return [...prev, newData]
})
0
ayabbear 2 oct. 2021 à 20:58

2 réponses

Meilleure réponse

Si je comprends bien votre problème, vous essayez de faire quelque chose comme ceci :

setDashbaord(prevDashboard => ({ ...prevDashboard, address: "xxx", data: [...prevDashboard.data, newData] }));

C'est ce que vous cherchez?

1
HOERNSCHEN 2 oct. 2021 à 18:08
const [dashboard, setDashboard] = useState({ loading: true, data: [], address: '' })

La ligne ci-dessus est superbe, pas de problèmes là-bas.

setDashboard((prev) => {
   return [...prev, newData]
})

Faire cela définira votre variable dashboard comme un tableau, et ce n'est certainement pas ce que vous avez dit que vous vouliez.

setDashboard((prev) => {
  return {
    ...prev,
    data: [...prev.data, ...newData] // <-- assuming new data is an array
  }
})

Selon l'apparence de newData, vous devrez peut-être fusionner manuellement les données dans votre objet de données précédent. Par exemple, si vous voulez vous assurer qu'il n'y a pas de valeurs en double dans le tableau, ou si vous devez les trier.

1
ajthyng 2 oct. 2021 à 18:11