「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > React の再レンダーをマスターする: よくある落とし穴を回避する方法

React の再レンダーをマスターする: よくある落とし穴を回避する方法

2024 年 11 月 3 日に公開
ブラウズ:873

Mastering React Re-renders: How to Avoid Common Pitfalls

1.導入

これを想像してみてください。洗練された機能豊富な React アプリを構築したばかりですが、突然パフォーマンスが低下し始めます。ボタンの動作が遅く、データの更新に時間がかかりすぎ、その理由がわかりません。これに聞き覚えがあるかもしれませんが、あなたは一人ではありません。 React の再レンダリングは、不適切に処理されると、パフォーマンスの問題の背後にある隠れた原因となることがよくあります。

React での再レンダリングをマスターすることは、効率的でスケーラブルなアプリケーションの構築を目指す Web 開発者にとって非常に重要です。 React の再レンダリングがどのように機能するかを深く掘り下げて、パフォーマンスを最適化し、よくある落とし穴を回避し、React アプリを超高速エクスペリエンスに変換するための実践的な戦略を見つけてみましょう。

2. React の再レンダリングはどのように機能しますか?

React の再レンダリング メカニズムは、最も強力な機能の 1 つです。これにより、アプリは状態やプロパティの変化に基づいて UI を動的に更新できます。ただし、最適化されていない場合、このプロセスは不必要な再レンダリングにつながり、パフォーマンスの低下を引き起こす可能性があります。

簡単に言えば、React は毎回再レンダリングします:

  1. コンポーネントの状態が変化します。
  2. コンポーネントは新しいプロパティを受け取ります。
  3. 親コンポーネントが再レンダリングされます。

しかし、コンポーネントの再レンダリングが頻繁に行われるとどうなるでしょうか?ブラウザーは画面を再描画する必要があるため、アニメーションが不安定になり、操作が遅くなり、ユーザーがイライラすることになります。ここで、自分自身に問いかけてください。アプリが遅いと感じながらも、その理由を正確に特定できなかったことが何度ありますか?

3.過剰な再レンダリングがパフォーマンスに悪影響を与える理由

過剰な再レンダリングによりドミノ効果が生じ、アプリ全体が遅くなります。再レンダリングが発生するたびに:

  1. React は変更を仮想 DOM と調整します。
  2. 実際の DOM に対して行われる最小限の更新を計算します。
  3. ブラウザは画面を再描画します。

小さなアプリでは、これは目立たない可能性があります。しかし、深くネストされたコンポーネントと複雑な状態管理を備えた大規模なアプリケーションでは、最小の不必要な再レンダリングさえもパフォーマンスのボトルネックになる可能性があります。

簡単な例を示します:

const UserList = ({ users }) => {
  return users.map(user => 
{user.name}
); }; // Inside a parent component:

次に、ユーザーが変更されていない場合でも、親コンポーネントが更新されるたびに、この UserList が再レンダリングされると想像してください。ここに問題があります。このような不必要な再レンダリングを防ぐにはどうすればよいでしょうか?

4.よくある落とし穴 (およびその回避方法)

落とし穴 1: 関数とオブジェクトをメモ化しない

親コンポーネントが再レンダリングされるたびに、実際の値が変更されていない場合でも、新しい関数とオブジェクトの参照が作成されます。これにより、子コンポーネントが不必要に再レンダリングされます。

アクション: useCallback フックと useMemo フックを使用して、関数とオブジェクトをメモ化します。

const ParentComponent = () => {
  const handleClick = useCallback(() => {
    // some function logic
  }, []);

  const userDetails = useMemo(() => ({ name: "Rajesh", age: 30 }), []);

  return ;
};

機能する理由: メモ化により、再レンダリングのたびに新しい関数とオブジェクトの参照が作成されなくなり、子コンポーネントでの不必要なレンダリングが削減されます。

落とし穴 2: インライン関数またはオブジェクトを Props として渡す

インライン関数またはオブジェクトは、コンポーネントがレンダリングされるたびに作成され、実際の値が変更されていない場合でも、受信コンポーネントが再レンダリングされます。

アクション: コンポーネントの外で関数とオブジェクトを宣言するか、メモ化フックを使用してください。

// Avoid this:
 console.log("clicked")} />

// Instead:
const handleClick = useCallback(() => console.log("clicked"), []);

落とし穴 3: React.memo の使用に失敗する

一部のコンポーネントは本質的に純粋であり、同じ props が与えられると常に同じ出力をレンダリングします。それでも、React.memo がなければ、親コンポーネントが再レンダリングされると、依然として再レンダリングされます。

アクション: 不要な再レンダリングを防ぐために、機能コンポーネントを React.memo でラップします。

const ChildComponent = React.memo(({ data }) => {
  return 
{data.name}
; });

機能する理由: React.memo は、コンポーネントがそのプロパティが変更されたときにのみ再レンダリングされるようにし、冗長なレンダリングを回避します。

5. React の再レンダリングを追跡およびデバッグする方法

「コンポーネントが再レンダリングされるのはなぜですか?」と疑問に思ったことはありませんか? React DevTools は、レンダリングを追跡し、どこで問題が発生しているかを理解するための優れた方法を提供します。

  1. 「ハイライト更新」を有効にする: これにより、どのコンポーネントが再レンダリングされているかが表示されます。
  2. 「プロファイラー」タブを使用します: レンダリングのタイミングが表示され、ボトルネックの特定に役立ちます。

次のようなカスタム フックを使用して再レンダリングをログに記録することもできます:

const useWhyDidYouRender = (componentName, props) => {
  const previousProps = useRef(props);

  useEffect(() => {
    if (previousProps.current !== props) {
      console.log(`${componentName} re-rendered`);
      previousProps.current = props;
    }
  });
};

6. React の再レンダリングを最適化するためのベスト プラクティス

1.常にではなく、必要に応じて状態を引き上げる

状態を上位コンポーネントまで引き上げると、子コンポーネントの不必要な再レンダリングが発生することがあります。代わりに、可能な限りローカルで状態を管理してください。

2.キーを賢く使用する

リストをレンダリングするときは、各項目に安定した一意のキー プロパティがあることを確認してください。これは、変更された項目を特定することで React が再レンダリングを最適化するのに役立ちます。

3.マウントされていないコンポーネントの再レンダリングを避ける

これにより、メモリ リークやパフォーマンスの問題が発生する可能性があります。 useEffect クリーンアップ関数を使用して、アンマウントされたコンポーネントでの再レンダリングを回避します。

useEffect(() => {
  return () => {
    // cleanup logic here
  };
}, []);

7.概要: マスター React の再レンダリング

つまり、React の再レンダリングはパフォーマンスの問題の隠れた原因となる可能性がありますが、適切なテクニックを使用すれば、不必要な再レンダリングを防ぎ、アプリの高速性を維持し、スムーズなユーザー エクスペリエンスを保証できます。

  • 関数とオブジェクトをメモ化して、子コンポーネントの再レンダリングを回避します。
  • React.memoを使用して、純粋なコンポーネントでの不必要な再レンダリングを停止します。
  • React DevToolsを活用して、パフォーマンスのボトルネックを追跡、理解、デバッグします。

8.実践的な応用: 意図的な再レンダリングによるパフォーマンスの向上

次回 React アプリを最適化するときは、各再レンダリングについて批判的に考えてください。それらは必要なのでしょうか?この関数をメモ化するとどうなるでしょうか?これらの戦略を適用することで、よりスリムで高速な React コードを作成し、最も経験豊富な開発者でもつまずくよくある落とし穴を回避できるようになります。


最終的な考え: React の再レンダリングの詳細を学習したので、次はこれらの最適化を独自のアプリに適用してください。パフォーマンスが向上するだけでなく、スケーラブルで保守可能な React コードを書くことに自信が持てるようになります!


リリースステートメント この記事は次の場所に転載されています: https://dev.to/paharihacker/mastering-react-re-renders-how-to-avoid-common-pitfalls-k01?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3