Рассмотрим этот пример:
saveHeader() {
this.state.shoeList[0].id = 'newid'
this.setState({ shoeList: this.state.shoeList })
}
setState () проверяет, изменились ли значения, и если нет, то не обновляет компонент. Изменение вложенного значения не приводит к изменению ссылки на массив, что означает, что простого вызова setState () недостаточно.
Существует два пути решения этой проблемы. Во-первых, необходимо использовать forceUpdate ():
saveHeader() {
this.state.shoeList[0].id = 'newid'
this.forceUpdate()
}
. Это заставляет компонент повторно выполнить рендеринг, даже если состояние не изменилось.
Второй способ - это фактически изменить Массив shoeList путем создания нового:
saveHeader() {
let newShoeList = this.state.shoeList.slice()
newShoeList[0].id = 'newid'
this.setState({ shoeList: newShoeList })
}
Использование .slice () в массиве создает новый массив, который полностью идентичен. Но поскольку это новый массив, React заметит, что состояние изменилось, и повторно отобразит компонент.