我在这里做了一个工作示例: https ://codesandbox.io/s/magical-flower-o0gyn?file=/src/App.js
当我单击隐藏按钮时,我想将更新的数据保存到本地存储:
- 我单击第一列上的隐藏:
setValueWithCallback
运行,将回调设置为 ref 并设置状态 useEffect
开始,使用更新的数据调用回调saveToLocalStorage
被调用,在一个useCallback
设置data
为依赖
问题出在第 3 步,保存到本地存储的内容{visible: true}
适用于两者。我知道如果我改变这一行:
const saveToLocalStorage = useCallback(() => {
localStorage.setItem(
`_colProps`,
JSON.stringify(data.map((e) => ({ id: e.id, visible: e.visible })))
);
}, [data]);
对此:
const saveToLocalStorage = localStorage.setItem(
`_colProps`,
JSON.stringify(data.map((e) => ({ id: e.id, visible: e.visible })))
);
它有效,但我无法理解,为什么第一个没有。我认为它一定是一些关闭的东西,但我没有看到它。
如果data
已经更新,并useEffect
运行了回调,为什么它没有在依赖数组中更新?是的,这个例子很奇怪,第二个解决方案很好,我只是想演示这个问题。谢谢您的帮助!