ホームページ >ウェブフロントエンド >jsチュートリアル >React useEffect フックが最初のレンダリングで実行されないようにする方法は?

React useEffect フックが最初のレンダリングで実行されないようにする方法は?

DDD
DDDオリジナル
2024-11-24 15:18:11575ブラウズ

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

初期レンダリングで React useEffect フックが実行されないようにする

useEffect フックは、React コンポーネントの副作用を管理するための貴重なツールです。ただし、デフォルトでは、最初のレンダリングを含むすべてのレンダリング後に実行されます。コード例で示すように、これにより望ましくない動作が発生する可能性があります。これを克服するには、2 つの効果的な戦略があります。

1. useRef フックを使用して初期レンダリングを追跡する

useRef フックを使用すると、再レンダリング後も保持される変更可能な値を保存できます。これを活用することで、useEffect 関数が初めて実行されたかどうかを追跡できます。

例:

const { useState, useRef, useEffect } = React;

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

  const firstUpdate = useRef(true);
  useEffect(() => {
    // Skip the initial render
    if (firstUpdate.current) {
      firstUpdate.current = false;
      return;
    }

    console.log("useEffect ran");
  });

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

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

2. useLayoutEffect フックの利用

useLayoutEffect フックは、実行フェーズの観点から、componentDidUpdate の動作をシミュレートするために導入されています。ブラウザがペイントする前に実行され、視覚的な不具合を防ぎます。

例:

const { useState, useLayoutEffect } = React;

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

  useLayoutEffect(() => {
    console.log("useLayoutEffect ran");
  });

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

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

以上がReact useEffect フックが最初のレンダリングで実行されないようにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。