hooks 之useEffect useLayoutEffect区别?

52 阅读1分钟

useEffect useLayoutEffect是react中的两个副作用钩子函数,主要区别是触发时机不同

区别:

  • useEffect是组件渲染完成之后执行,一般用来进行数据请求,事件订阅,定时器等。

  • useEffect 的回调函数返回一个函数,用于清除操作,取消订阅、清除定时器等。

  • useEffect的回调函数会在每次渲染结束后之后异步执行,不会阻塞浏览器的渲染过程

  • useLayoutEffect的回调函数会在每次渲染结束之后同步执行,会阻塞浏览器的渲染过程,从而导致页面性能下降

  • useLayoutEffect 的回调函数也可以返回一个函数,用于清除操作,取消订阅、清除定时器等。

以下代码举例: image.png

GIF 2023-11-17 17-50-26.gif 可以看到,useEffect修改的数据count1初始值是0,点击后先是变成100,最后变成了1,出现闪屏的效果,是因为useEffect是渲染完之后异步执行的,所以会先导致100渲染到屏幕上,然后再变成了1,就会有闪屏的效果。
useLayoutEffect,渲染之前同步执行的,所以等执行完直接渲染,count2直接变成了1,所以就不会有闪屏的效果。

  • 注:一般情况下使用useEffect,如果需要同步执行、对布局有影响的处理时使用 useLayoutEffect