前端问题求助大佬(react)

2021-03-23 19:01:19 +08:00
 miloooz

codesandbox 链接

求问各位大佬 问题就是在

 const add = useCallback(() => {
    console.log("progress", progress);
    setProgress((progress) => progress + 1);
  }, [progress]);

add 函数里打印 progress 为什么没有更新呀。不是已经放在第二个参数依赖列表里面了吗。 add 函数已经更新了呀。

官网上关于 useEffect 与 useCallback 之间搭配使用貌似没看到有什么特别要注意的点呀。 测试代码已经发到 codesandbox,多多麻烦懂得老哥给看看

896 次点击
所在节点    问与答
4 条回复
sweetcola
2021-03-23 19:14:31 +08:00
你没把 add 函数放进 DependencyList 里,不放进去的话永远调用最开始拿到的 add 函数。
最开始的 add 函数输出的永远是最开始的 progress 。
noe132
2021-03-23 19:20:29 +08:00
setInterval 里调用的 add 是定时器创建时闭包内的 add 。后面 add 更新是全新的闭包了,因为组件函数每次渲染都会执行。
要想在 setInterval 里拿到最新的 add,你得想办法把 add 放在某个稳定引用的对象上面,然后把这个对象放到 setInterval 里面去取这个 add
wenzichel
2021-03-23 19:39:15 +08:00
如果是定时器的话,建议使用`useRef`中的 current 来保存每一个回调。

https://www.xiabingbao.com/demos/20191115/react-useInterval.html
dcbryant
2021-03-23 20:00:26 +08:00
useEffect 与 useCallback 之间搭配使用的话,add 得放到 useEffect 的依赖里面

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764380

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX