Добавить объект с помощью setState () в массив объектов - PullRequest
0 голосов
/ 23 октября 2018

Состояние моего компонента - это массив объектов:

this.state = {
  userFavorites: [{id: 1, title: 'A'}, {id: 2, title: 'B'}]
}

Мне нужно, каждый раз, когда я нажимаю кнопку, обновлять свое состояние другим объектом, подобным тем, что есть в моем состоянии выше;например: {id: 3, title: 'C'}.

Если я просто конкатирую их и устанавливаю состояние, последний объект продолжает изменяться тем, который добавляется.

Нужен ли здесь оператор спреда?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Вы должны сделать это таким образом.Ниже приведен наиболее рекомендуемый способ передачи значений или объектов в массив в реакции

 this.setState( prevState => ({
     userFavorites: [...prevState.userFavourites,  {id: 3, title: 'C'}]
 }));

Для перемещения в начало массива сделайте это следующим образом

   this.setState( prevState => ({
     userFavorites: [{id: 3, title: 'C'}, ...prevState.userFavourites]
  }));
0 голосов
/ 23 октября 2018

Есть несколько способов сделать это.Самый простой способ для того, что вам нужно сделать, это использовать оператор распространения.Обратите внимание, что item - это объект, добавляемый в userFavor.

this.setState({
  userFavorites: [ ...this.state.userFavorites, item ],
});

Примечание. Если в какой-то момент строки, вам необходимо обновить определенный элемент в массиве, вы можете использовать функцию обновления из библиотеки immutability-helpers.https://reactjs.org/docs/update.html

0 голосов
/ 23 октября 2018
const userFavorites = [...this.state.userFavorites, {id: 3, title: 'C'}]
this.setState({ userFavorites })
...