MST

星途 面试题库

面试题:React中useLayoutEffect Hook与useEffect Hook在浏览器渲染机制方面的主要区别

请详细阐述React中useLayoutEffect Hook与useEffect Hook在结合浏览器渲染机制时,执行时机和应用场景上的主要区别。
37.2万 热度难度
前端开发React

知识考点

AI 面试

面试题答案

一键面试

执行时机区别

  1. useEffect
    • 它在浏览器完成布局与绘制之后,在一个延迟的事件循环中异步执行。也就是说,当页面已经在屏幕上呈现给用户之后,才会触发useEffect中的回调函数。这确保了不会阻塞用户界面的渲染,因为它是在渲染完成后异步执行的。
  2. useLayoutEffect
    • useEffect不同,useLayoutEffect是在浏览器完成布局与绘制之前同步执行。这意味着它会在所有的DOM变更之后,但在浏览器将变更渲染到屏幕之前运行。由于它是同步执行的,如果useLayoutEffect中的代码执行时间过长,可能会阻塞浏览器的渲染,导致页面卡顿。

应用场景区别

  1. useEffect
    • 数据获取:常用于从API获取数据。例如,在组件挂载后,通过useEffect发送HTTP请求获取数据,因为这种操作不需要即时完成,不会影响页面的初始渲染。
    • 副作用操作:如设置页面标题、订阅事件(如window.addEventListener)等不需要在渲染前完成的操作。这些操作不会阻塞渲染,并且通常在页面已经渲染后执行是合理的。
  2. useLayoutEffect
    • DOM测量与操作:当需要在渲染前测量DOM元素的尺寸或基于DOM状态进行同步更新时使用。例如,要根据某个元素的宽度动态调整另一个元素的位置,useLayoutEffect可以在DOM更新后但渲染前获取准确的尺寸信息并进行相应调整。
    • 避免闪烁:当需要立即更新DOM以避免视觉闪烁时使用。例如,初始渲染时需要隐藏一个元素,然后基于某些状态变化显示它,使用useLayoutEffect可以在渲染前完成这个隐藏操作,避免用户看到元素先显示后隐藏的闪烁现象。