У меня сложная и динамическая структура данных, например:
const tree = [
{
name: "Root Node",
collapsed: true,
nodes: [
{
name: "Node 1",
collapsed: true,
nodes: [
{
name: "Sub node"
}
]
},
{
name: "Node 2",
collapsed: true,
nodes: [
{
name: "Sub node "
}
]
},
{
name: "Node 3",
collapsed: true,
nodes: [
{
name: "Sub node"
}
]
}
]
}
];`
Я устанавливаю это как начальное состояние моего компонента.
Затем я отображаю это состояние в виде иерархического дерева в пользовательском интерфейсе.
Когда я щелкаю узел верхнего уровня, я хочу обновить свернутое свойство в состоянии, чтобы оно открывалось и отображалосьследующий набор узлов.
Проблема, с которой я столкнулся, заключается в том, как мне вызвать setState () и обновить эту сложную структуру данных, не вызывая мутации и не делая некрасивые вещи, такие как tree [0] .nodes [0].collapsed: false.
Итак, я сначала попытался установить состояние следующим образом
handleClick(el, event) {
this.setState({
tree: this.findAndUpdateState(event.target.id).bind(this)
});
}
Итак, для события handleClick узла, который я вызываю, это вызывает findAndUpdateState.
findAndUpdateState(id) {
this.state.tree.map((node) => {
//Map over the nodes somehow and find the node that needs its state updated using the ID?
});
});
}
Я хочу обновить свернутое свойство узла, который пытался расширить.Но для этого мне нужно пройти через все состояния, а затем создать новую копию состояния, чтобы обновить это свойство.Должен быть более приятный и простой способ, о котором я не думаю.