Я думал, что useState
нужно иметь новое значение, чтобы он мог принимать обновления:
Я создал codesandbox , чтобы проиллюстрировать, что я имею в виду.
У меня есть вложенная структура данных, подобная этой
const state = {
name: "parent",
data: {
isExpanded: false,
children: [
{ name: "one", data: { isExpanded: false } },
{ name: "two", data: { isExpanded: false } },
{ name: "three", data: { isExpanded: false } }
]
}
};
Затем я использую useState
, чтобы вызвать рендеринг при изменении состояния:
function App() {
const [tree, setTree] = useState(state);
const toggleExpanded = node => {
node.data.isExpanded = !node.data.isExpanded;
setTree(tree);
};
return (
<div className="App">
<h1>IsExpanded</h1>
{tree.data.children.map(child => (
<button onClick={() => toggleExpanded(child)}>
{child.name} - {child.data.isExpanded ? "on" : "off"}
</button>
))}
</div>
);
}
Я использую одну и ту же ссылку каждый раз при вызовеsetTree
и обновления происходят.
Я думал, что каждый раз для этого требуется новая ссылка?
Возможно, я что-то упускаю, но обновление не происходит с той же ссылкой.