useEffect链表
通过MountEffect办法把callback/依赖项退出到链表中
视图更新结束,基于UpdateEffect办法通过effect链表中的callback依照要求执行

useEffect和useLayoutEffect

组件渲染过程
1.基于react-app编译,基于babel-preset-react-app把jsx编译成createElement格局
2.把createElement执行,创立virtualDOM
3.DOM-DIFF 渲染为实在dom
3.1.root.render办法,须要的DOM对象都创立进去 //useLayoutEffect
3.2.浏览器绘制和渲染 //useEffect

如果链表中的callback执行又批改了状态值【视图更新】对于useEffect来讲:
第一次实在DOM曾经渲染,组件更新会从新渲染实在DOM;所以频繁切换的时候,会呈现款式/内容闪动
对于useLayoutEffect来讲,第一次实在DOM还未渲染,遇到callback中批改状态,视图立刻更新,创立出新的virtualDOM合并在一起渲染为实在DOM,也就是在此类需要下,实在DOM值渲染一次,不会呈现款式/内容闪动
useLayoutEffect会优于useEffect先执行
useLayoutEffect
其函数签名与 useEffect 雷同,但它会在所有的 DOM 变更之后同步调用 effect
能够应用它来读取 DOM 布局并同步触发重渲染。
在浏览器执行绘制之前(还没有绘制成实在DOM),useLayoutEffect 外部的更新打算将被同步刷新。
useLayoutEffect会阻塞浏览器实在DOM,优先执行Effect链表中的callback
尽可能应用规范的 useEffect 以防止阻塞视觉更新