请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么动画优先级高

用 ConcurrentMode 包裹是为了降低组件渲染(setState)的优先级来提高动画的优先级吗。
动画的优先级是怎么被提高的,动画应该只是事件循环的 render 环节,setInterval 本身是个宏任务,而 setState 更新dom我猜应该用了微任务,执行一次宏任务,清一次微任务,渲染一次,ConcurrentMode 只是让 setState 延后执行了,但 setInterval 还是正常执行,还能保证每次的结果是对的,这是怎么做到的,感觉如果把两次微任务合并了,结果会不对,比如1直接变成3

正在回答

1回答

这里指的动画是浏览器渲染,浏览器渲染动画是一个频繁操作,要保证一秒30帧,浏览器就要每33.3毫秒渲染一次,如果这33.3毫秒我们全在执行js,也就是react的计算,那么浏览器就没空渲染动画,就卡帧了。

0 回复 有任何疑惑可以回复我~
  • 提问者 诺巴蒂 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-10-22 11:01:32
  • 提问者 诺巴蒂 #2
    屏幕都有固定的刷新率(比如最新的一般在 60Hz),16ms...
    所以是不是 ConcurrentMode 包裹 浏览器暂时先保存一下,不把setstate的任务 放到执行栈,等空闲或者超时的时候再扔进去,flush是立刻扔进去
    回复 有任何疑惑可以回复我~ 2019-10-22 11:14:27
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信