React Hooks 之 useState

57 阅读1分钟

useEffect的执行时机

默认情况下,effect 在第一次渲染之后和每次更新之后都会执行,也可以是只有某些值发生变化之后执行,重点在于是每轮渲染结束后延迟调用( 异步执行 ) ,这是 useEffect 的好处,保证执行 effect 的时候,DOM 都已经更新完毕,不会阻碍 DOM 渲染,造成视觉阻塞。

useEffect和useLayoutEffect的区别

useLayoutEffect 的使用方法和 useEffect 相同,区别是他们的执行时机。

如上面所说,effect 的内容是会在渲染 DOM 之后执行,然而并非所有的操作都能被放在 effect 都延迟执行的,例如,在浏览器执行下一次绘制前,需要操作 DOM 改变页面样式,如果放在 useEffect 中执行,会出现闪屏问题。而 useLayoutEffect 是在浏览器执行绘制之前被同步执行,放在 useLayoutEffect 中就会避免这个问题。

这篇文章中可以清楚的看到上述例子的具体实现:useEffect 和 useLayoutEffect 的区别