Вы никогда не должны напрямую изменять состояние React, но должны делать это как:
var modifiedData = {...this.state.data}; // shallow copy of data
var modifiedNodes = [...this.state.data.nodes] // shallow copy of nodes array
var modifiedNode = {...this.state.data.nodes[0]} // shallow copy of node you are trying to change the color of
modifiedNode.color = 'yellow'; // changes color of a copy of the original node (not the original node itself, ensuring you aren't modifying the original React state directly)
modifiedNodes[0] = modifiedNode; // modifies the copy, for same reason
modifiedData.nodes = modifiedNodes; // modifies the copy, again for same reason
this.setState({data: modifiedData });
Кроме того, не уверен, почему у вас был "this.setState ({color});", в последней строке. Если у вас есть состояние как "данные: {
узлы: [{"id": "8", "color": "red"}],
},»
тогда у вас должно быть this.setState ({data :ifiedData}); ', как у меня выше. И опять же, вы не должны изменять состояние напрямую, как вы делаете это в 'color.nodes [0] .color =' yellow ';'. Это напрямую изменяет состояние, потому что 'var color = [... this.state.data]' принимает только поверхностную копию, что означает, что любые вложенные массивы и объекты (поскольку они являются ссылочными типами и объектами в Javascript), не копируются глубоко. Вы должны глубоко скопировать их, как я делал выше.
Подробнее о том, почему вы не должны изменять состояние напрямую:
https://daveceddia.com/why-not-modify-react-state-directly/
Почему я не могу напрямую изменить состояние компонента?