当使用requestAnimationFrame和cancelAnimationFrame时,useEffect的执行顺序是怎样的,以及它的内部清理逻辑是什么?
- 论坛
- 当使用requestAnimationFrame和cancelAnimationFrame时,useEffect的执行顺序是怎样的,以及它的内部清理逻辑是什么?
5 浏览
当使用requestAnimationFrame和cancelAnimationFrame时,useEffect的执行顺序是怎样的,以及它的内部清理逻辑是什么?
根据React文档,useEffect
在重新运行useEffect
部分之前会触发清理逻辑。
如果你的effect返回一个函数,React会在清理时运行它...
没有处理更新的特殊代码,因为
useEffect
默认处理它们。它在应用下一个effect之前清理前一个effect...
然而,当我在useEffect
中使用requestAnimationFrame
和cancelAnimationFrame
时,我发现cancelAnimationFrame
有时无法正常停止动画。有时候,我发现旧的动画仍然存在,而下一个effect会带来另一个动画,这导致我的Web应用性能问题(特别是当我需要渲染繁重的DOM元素时)。
我不知道React Hook在执行清理代码之前是否会做一些额外的工作,这可能导致我的取消动画部分无法正常工作。useEffect
钩子是否会像闭包一样锁定状态变量?
useEffect
的执行顺序和其内部的清理逻辑是什么?下面的代码有什么问题,导致cancelAnimationFrame
无法完美工作?
谢谢。