求问各位大佬 问题就是在
const add = useCallback(() => {
console.log("progress", progress);
setProgress((progress) => progress + 1);
}, [progress]);
add 函数里打印 progress 为什么没有更新呀。不是已经放在第二个参数依赖列表里面了吗。 add 函数已经更新了呀。
官网上关于 useEffect 与 useCallback 之间搭配使用貌似没看到有什么特别要注意的点呀。 测试代码已经发到 codesandbox,多多麻烦懂得老哥给看看
1
sweetcola 2021-03-23 19:14:31 +08:00 1
你没把 add 函数放进 DependencyList 里,不放进去的话永远调用最开始拿到的 add 函数。
最开始的 add 函数输出的永远是最开始的 progress 。 |
2
noe132 2021-03-23 19:20:29 +08:00 1
setInterval 里调用的 add 是定时器创建时闭包内的 add 。后面 add 更新是全新的闭包了,因为组件函数每次渲染都会执行。
要想在 setInterval 里拿到最新的 add,你得想办法把 add 放在某个稳定引用的对象上面,然后把这个对象放到 setInterval 里面去取这个 add |
3
wenzichel 2021-03-23 19:39:15 +08:00 1
如果是定时器的话,建议使用`useRef`中的 current 来保存每一个回调。
https://www.xiabingbao.com/demos/20191115/react-useInterval.html |
4
dcbryant 2021-03-23 20:00:26 +08:00 1
useEffect 与 useCallback 之间搭配使用的话,add 得放到 useEffect 的依赖里面
|