Скажем, у меня есть список простых объектов, this.state.list
которые я затем могу использовать для рендеринга списка потомков. В какой же тогда правильный способ вставить объект this.state.list
?
Ниже приведен единственный способ, который, я думаю, будет работать, потому что вы не можете this.state
напрямую изменять, как указано в документе.
this._list.push(newObject):
this.setState({list: this._list});
Мне это кажется некрасивым. Есть ли способ лучше?
Ответы:
concat
возвращает новый массив, поэтому вы можете сделатьдругая альтернатива - помощник неизменяемости React
источник
concat
принимает массив, поэтому вы захотитеthis.state.list.concat([newObject])
.concat
он обернет его в массив, но лучше добавить массив самостоятельно, чтобы быть явным: если у вас есть[[1,2], [3,4]]
и вы хотите добавить[5,6]
в качестве следующего элемента, вам нужно сделать.concat([[5,6]])
еще получится[[1,2], [3,4], 5, 6]
.Array.concat
конечно, лучше добавить еще одну библиотеку.setState () можно вызвать с функцией в качестве параметра:
или в ES5:
источник
this.setState((state) => ({ list: state.list.push(newObj) }))
NUMBER
, который будет установлен дляlist
переменнойthis.setState((state) => ({ list: [...state.list, newObj] }))
Обновление 2016
С ES6 вы можете использовать:
источник
...[newObject]
то же самое, что и простоnewObject
.Из документации по реакции ( https://facebook.github.io/react/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous ):
Поэтому вам следует сделать это:
источник