首頁 >web前端 >js教程 >如何防止 useEffect Hook 在 React 中的初始渲染上運行?

如何防止 useEffect Hook 在 React 中的初始渲染上運行?

Barbara Streisand
Barbara Streisand原創
2024-11-21 05:37:13580瀏覽

How to Prevent useEffect Hook from Running on Initial Render in React?

使React 的useEffect Hook 避免初始渲染執行

基於類別的React 元件中的componentDidUpdate() 渲染生命週期方法後都會被調用,除了最初的。要使用 useEffect 掛鉤模擬此行為,該掛鉤可能會在每次渲染上運行,包括第一次。

解決方案

阻止 useEffect 運行在初始渲染時,利用 useRef 鉤子可以幫助追蹤是否是效果的初始調用。

此外,要模仿在「佈局效果」階段運行的 componentDidUpdate 的行為,請考慮使用 useLayoutEffect 而不是 useEffect。

範例

const { useState, useRef, useLayoutEffect } = React;

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

  const firstUpdate = useRef(true);
  useLayoutEffect(() => {
    if (firstUpdate.current) {
      firstUpdate.current = false;
      return;
    }

    console.log("componentDidUpdateFunction");
  });

  return (
    <div>
      <p>componentDidUpdateFunction: {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click Me</button>
    </div>
  );
}

ReactDOM.render(
  <ComponentDidUpdateFunction />,
  document.getElementById("app")
);

此方法採用useRef 鉤子追蹤第一次更新並確保效果僅在後續更新期間執行,鏡像基於類別中的componentDidUpdate 的行為組件。

以上是如何防止 useEffect Hook 在 React 中的初始渲染上運行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn