在 JS 中,两个对象不相等。
const a = {}, b = {};
console.log(a === b);
所以我不能在useEffect
(React hooks)中使用一个对象作为第二个参数,因为它总是被认为是假的(所以它会重新渲染):
function MyComponent() {
// ...
useEffect(() => {
// do something
}, [myObject]) // <- this is the object that can change.
}
这样做(上面的代码),每次组件重新渲染时都会产生运行效果,因为每次都认为对象不相等。
我可以通过将对象作为 JSON 字符串化值传递来“破解”它,但这有点脏 IMO:
function MyComponent() {
// ...
useEffect(() => {
// do something
}, [JSON.stringify(myObject)]) // <- yuck
有没有更好的方法来做到这一点并避免不必要的效果调用?
旁注:对象具有嵌套属性。效果必须在此对象内的每个更改上运行。