@dollar1610

Как обновить state в этом случае?

Есть такой state
this.state = {
   listObjects : [ {Object} , {Object} , {Object} ]
}

Не могу понять, как обновить состояние у первого объекта, не меняя состояние других. Если попробовать так
this.setState.listObjects[1]({ })
Он выдает сообщение
Cannot read property '1' of undefined

При этом если вывести в консоль
console.log(this.state.listObjects[1])
То ошибки не будет, и он выведет нужный объект.
  • Вопрос задан
  • 386 просмотров
Решения вопроса 1
this.setState((prevState) => {
      prevState.listObjects[0].param = '3'
      return prevState;
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mudrenokanton
@mudrenokanton
frontend dev
this.setState((prevState) => {
  const prevArr = prevState.listObjects.slice();
  let el = prevArr.shift();
  el = { ...el, prop: 'value' }
  return ({ listObjects: [el, ...prevArr] });
})


upd. но лучше так:
const changeListObjValue = (index, newValue) => {
  this.setState((prevState) => {
    const newArr = prevState.listObjects.slice();
    newArr.splice(index, 1, newValue)
    return ({ listObjects: newArr });
  })
}
Ответ написан
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы