方法一: 去掉useEffect的第二个参数
例如以下代码 错误实例
const[zoom, setZoom] = useState(0);
useEffect(() = >{
document.getElementById('workspace-content').addEventListener('mousewheel', scrollFunc);
},[]);
function scrollFunc(e) {
setZoom(zoom + 5)
}
会出现zoom永远等于 0+5, 而不是所谓的5, 10 ,15 为什么会这样呢? 因为useEffect执行时,会创建一个闭包,在每次监听到mousewheel运行时 闭包内部保存了zoom的初始化值 每次调用的时候都是取的初始化值0 所有会一直为0+5
怎么解决呢?
解决方案: 去掉useEffect中的空数组即可
const[zoom, setZoom] = useState(0);
useEffect(() = >{
document.getElementById('workspace-content').addEventListener('mousewheel', scrollFunc);
return () = >document.getElementById('workspace-content').removeEventListener("mousewheel", scrollFu

本文探讨了在React Hook中遇到useState更新延迟的问题,并提出了三种解决方法:移除useEffect的第二个参数,将更改函数放入useEffect并设置依赖,以及使用useRef进行同步。详细解释了错误实例和正确解决方案。
最低0.47元/天 解锁文章
1561

被折叠的 条评论
为什么被折叠?



