当我使用 react 钩子更改数组中对象的属性时,该组件不会重新渲染。
我咨询了我的首席技术人员,他解释说 React 搜索“广度”而不是“深度”,这意味着 React 可以看到对象,但看不到对象属性的变化。
const [array, setArray] = useState([
{'id': 0, text: '0'},
{'id': 1, text: '1'},
{'id': 2, text: '2'}
]);
Run Code Online (Sandbox Code Playgroud)
我希望这个组件在状态改变时重新渲染,但行为就像对象数组根本没有改变一样。
如果我创建一个数组副本作为 newArray 并更改 newArray[2].text = '3' 和 setArray(newArray),react 认为数组没有改变。因此,组件不会重新加载。
作为一种解决方法,我使用
const [trigger, setTrigger] = useState(false);
setTrigger(!trigger);
Run Code Online (Sandbox Code Playgroud)
强制重新加载。然而,这是重新加载组件的一种hacky 方式,我想要一种更 React 的方式来做这件事。
先谢谢了!