官方对useLayoutEffect的定义
useLayoutEffect
等同于useEffect
, 但它会在所有dom改变之后同步触发,使用useLayoutEffect
可以读取dom的布局并且同步重新渲染。赶在浏览器绘制之前,useLayoutEffect
内部的更新将同步刷新;
如果你使用类组件,useLayoutEffect
会和componentDidMount
、componentDidUpdate
在同一时机触发,但是官方推荐先使用useEffect
,只有使用useEffect出错的时候再尝试useLayoutEffect
;
useEffect实现;
updateQueue
commitWork
commitHookEffectList
遍历queue的所有节点, 根据effect.tag 判断所处的阶段;
异步的等到所有节点更新完成,浏览器渲染完成,不会阻塞dom渲染;
useLayoutEffect实现;
在当前commit过程当中会执行destroy和create;
但是会占用浏览器的线程,可能造成卡顿;