当使用requestAnimationFrame和cancelAnimationFrame时,useEffect的执行顺序是怎样的,以及它的内部清理逻辑是什么?

5 浏览
0 Comments

当使用requestAnimationFrame和cancelAnimationFrame时,useEffect的执行顺序是怎样的,以及它的内部清理逻辑是什么?

根据React文档,useEffect在重新运行useEffect部分之前会触发清理逻辑。

如果你的effect返回一个函数,React会在清理时运行它...

没有处理更新的特殊代码,因为useEffect默认处理它们。它在应用下一个effect之前清理前一个effect...

然而,当我在useEffect中使用requestAnimationFramecancelAnimationFrame时,我发现cancelAnimationFrame有时无法正常停止动画。有时候,我发现旧的动画仍然存在,而下一个effect会带来另一个动画,这导致我的Web应用性能问题(特别是当我需要渲染繁重的DOM元素时)。

我不知道React Hook在执行清理代码之前是否会做一些额外的工作,这可能导致我的取消动画部分无法正常工作。useEffect钩子是否会像闭包一样锁定状态变量?

useEffect的执行顺序和其内部的清理逻辑是什么?下面的代码有什么问题,导致cancelAnimationFrame无法完美工作?

谢谢。

0