useEffect useLayoutEffect是react中的两个副作用钩子函数,主要区别是触发时机不同
区别:
-
useEffect是组件渲染完成之后执行,一般用来进行数据请求,事件订阅,定时器等。 -
useEffect的回调函数返回一个函数,用于清除操作,取消订阅、清除定时器等。 -
useEffect的回调函数会在每次渲染结束后之后异步执行,不会阻塞浏览器的渲染过程 -
useLayoutEffect的回调函数会在每次渲染结束之后同步执行,会阻塞浏览器的渲染过程,从而导致页面性能下降 -
useLayoutEffect的回调函数也可以返回一个函数,用于清除操作,取消订阅、清除定时器等。
以下代码举例:
可以看到,
useEffect修改的数据count1初始值是0,点击后先是变成100,最后变成了1,出现闪屏的效果,是因为useEffect是渲染完之后异步执行的,所以会先导致100渲染到屏幕上,然后再变成了1,就会有闪屏的效果。
而useLayoutEffect,渲染之前同步执行的,所以等执行完直接渲染,count2直接变成了1,所以就不会有闪屏的效果。
- 注:一般情况下使用
useEffect,如果需要同步执行、对布局有影响的处理时使用useLayoutEffect