Добавление массива и объекта в массив реагируют на крючки

#javascript #reactjs

Вопрос:

Я пытаюсь добавить массив и объект в массив.

Это мой конструктор

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

и вот как я хотел, чтобы данные оказались в конечном итоге

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

Кажется, я не могу этого понять, и мне удалось добавить только массивы, но не другие объекты, такие как loading и address с чем-то подобным, но это не то, что мне нужно, и я просто привожу пример того, что я пытался сделать:

конструктор этого в нижней части отличается от того, что я хочу использовать, я использовал что-то вроде этого

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

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

Ответ №1:

Если я правильно понимаю вашу проблему, вы пытаетесь сделать что-то вроде этого:

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

Это то, что вы ищете?

Комментарии:

1. да!! Спасибо!!

Ответ №2:

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

Строка выше выглядит великолепно, никаких проблем нет.

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

Это приведет к тому, что ваша dashboard переменная станет массивом, и это определенно не то, что вы сказали, что хотели.

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

В зависимости от того newData , как это выглядит, вам может потребоваться вручную объединить данные в ваш предыдущий объект данных. Например, если вы хотите убедиться, что в массиве нет повторяющихся значений, или вам нужно их отсортировать.

Комментарии:

1. да, ты все понял правильно! Спасибо! <3