React useEffect vs useLayoutEffect

2023-05-16

两者的区别

两者的函数签名是一样的,即用法一样。两者的区别在于执行时机不同

  • useEffect是在DOM的变化渲染到屏幕后异步执行的
  • useLayoutEffect是在DOM变化后渲染前同步执行的

因此从执行时机上看,useLayoutEffect要早于useEffect执行。

举个例子

function App() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    console.log("USE EFFECT FUNCTION TRIGGERED");
  });

  useLayoutEffect(() => {
    console.log("USE LAYOUT EFFECT FUNCTION TRIGGERED");
  });

  return (
    <div className="App">
      <h1>{count}</h1>
      <h2>
        <button onClick={() => setCount(count => count + 1)}>
          Update Count
        </button>
      </h2>
    </div>
  );
}

当点击按钮将计数增加时,USE LAYOUT EFFECT FUNCTION TRIGGERED会率先打印。

使用建议

  • 由于useEffect是异步执行,不会阻塞UI的渲染,尤其是副作用中包含有大量计算时,使用useEffect在性能上要比useLayoutEffect更好。因此useEffect是我们大多数时候的选择。
  • useEffect也有一些不适应的场景,比如在副作用中更改DOM时可能会导致页面抖动,因为触发了两次页面的绘制。此时应该考虑使用useLayoutEffect

总结

useEffect是我们处理副作用时的第一选择,仅当我们需要在页面渲染前进行DOM的操作以防止页面抖动(尤其是涉及到动画相关)时使用useLayoutEffect

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React useEffect vs useLayoutEffect 的相关文章

  • 【硬件】玩客云 armbian 死机问题解决办法

    分析 网上看过大部分的案例在恩山论坛比较常见 xff0c 主要原因是EMMC模块存在硬件瑕疵 xff0c 因此容易在CPU满载时 xff0c 温度过高导致死机 xff0c 主流的解决方案是降频 恩山论坛 玩客云案例 解决过程 可以用来进行检

随机推荐