обновление одного значения в массиве State реагирует на натив - PullRequest
0 голосов
/ 30 мая 2018

Пытаясь обновить один элемент массива в this.state, я получаю (ожидаемую) ошибку, но не вижу, где я ошибся.Нужно ли создавать временное обновление массива, а затем назначать весь массив обратно в состояние

Это по сути то, что у меня

this.state = { array: ['a', 'b', 'c'] };

onBack() {
  this.setState({
      array[2]: 'something' 
  });
}

Ответы [ 4 ]

0 голосов
/ 30 мая 2018

Создать временное обновление массива, а затем присвоить весь массив обратно состоянию

var arr = [];
arr = this.state.array;
arr[2] = "something";
this.setState({
    array : arr
});
0 голосов
/ 30 мая 2018

Ответ Маноя будет работать, есть и другой способ использования функции обновления (funtinal setState) для setState (о котором вы можете прочитать здесь )

onBack() {
  this.setState(prevState => {
    let newArray = prevState.array
    newArray[2] = "something"
    return { array: newArray }
  });
}
0 голосов
/ 30 мая 2018

Вы не можете обновить состояние следующим образом.

Никогда не изменяйте this.state напрямую, так как последующий вызов setState () может заменить сделанную вами мутацию.Обрабатывайте this.state, как если бы оно было неизменным.

Чтение Реагирование документов .

Вы можете сделать что-то вроде этого:

let newArray = [...this.state.array];
newArray[2] = 'somethingElse';
this.setState({array: newArray});

В приведенном выше примере используется Синтаксис распространения .

Существует несколько способов изменения состояния, но все способы должны гарантировать, что данные обрабатываются как неизменяемые.Вы можете прочитать больше о состоянии обработки в React здесь

0 голосов
/ 30 мая 2018

Использовать Object.assign ({});

let array= Object.assign({}, this.state.array); //creating copy of object

array[2]="something"

this.setState({array});
...