「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス

React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス

2024 年 11 月 5 日に公開
ブラウズ:369

React Re-Rendering: Best Practices for Optimal Performance

React の効率的なレンダリング メカニズムは、その人気の主な理由の 1 つです。ただし、アプリケーションが複雑になるにつれて、コンポーネントの再レンダリングの管理がパフォーマンスを最適化するために重要になります。 React のレンダリング動作を最適化し、不必要な再レンダリングを回避するためのベスト プラクティスを探ってみましょう。

1. 機能コンポーネントには React.memo() を使用する

React.memo() は、機能コンポーネントのレンダリングをメモ化する高次コンポーネントです。現在のプロップと以前のプロップの浅い比較を実行することで、不必要な再レンダリングを防ぎます。プロパティが変更されていない場合、React はコンポーネントのレンダリングをスキップし、最後にレンダリングされた結果を再利用します。

import React from 'react';

const MemoizedComponent = React.memo(function MyComponent(props) {
  // Component logic
});

2. クラスコンポーネントの PureComponent の実装

クラス コンポーネントを使用している場合は、Component の代わりに PureComponent を拡張することを検討してください。 PureComponent は、プロパティと状態の浅い比較を実行して、コンポーネントを更新する必要があるかどうかを判断します。これは、プロパティと状態が変更されていない場合に不必要な再レンダリングを回避するのに役立ちます。

import React, { PureComponent } from 'react';

class MyComponent extends PureComponent {
  // Component logic
}

3. インライン関数定義を避ける

render メソッド内で関数を定義すると、不必要な再レンダリングが発生する可能性があります。代わりに、render メソッドの外側で関数を定義するか、簡潔なイベント ハンドラーにアロー関数を使用します。

class MyComponent extends React.Component {
  handleClick = () => {
    // Handle click
  };

  render() {
    return ;
  }
}

4. useCallback フックを使用する 関数をメモ化する

useCallback フックは関数をメモ化するために使用されます。これにより、レンダリングごとに関数が不必要に再作成されるのを防ぎます。これにより、これらの関数に依存する子コンポーネントが不必要に再レンダリングされる可能性があります。

import React, { useCallback } from 'react';

function MyComponent() {
  const handleClick = useCallback(() => {
    // Handle click
  }, []);

  return ;
}

5. 高コストの計算には useMemo フックを活用する

useMemo フックは、高価な計算をメモ化するために使用されます。これにより、レンダリングごとに値の不必要な再計算が防止され、特に複雑な計算のパフォーマンスが向上します。

import React, { useMemo } from 'react';

function MyComponent({ items }) {
  const filteredItems = useMemo(() => items.filter(item => item.visible), [items]);

  return (
    
    {filteredItems.map(item => (
  • {item.name}
  • ))}
); }

6. リスト内でキーを正しく使用する

コンポーネントのリストをレンダリングするときは、常に一意のキー プロパティを指定します。 React はキーを使用して、調整中に要素を効率的に識別します。キーが間違っているか欠落していると、パフォーマンスの問題や予期しない動作が発生する可能性があります。

    {items.map(item => (
  • {item.name}
  • ))}

7. 動的インポートを使用した コード分割の実装

コード分割を使用すると、アプリケーションのコードをより小さなチャンクに分割できます。動的インポート (import()) を使用すると、アプリケーションの一部をオンデマンドでロードできるため、初期バンドル サイズが削減され、ロード時間が短縮されます。

import React, { lazy, Suspense } from 'react';

const MyComponent = lazy(() => import('./MyComponent'));

function App() {
  return (
    Loading...}>
      
  );
}

8. 大きなリストに対する ウィンドウ処理の実装

仮想化とも呼ばれるウィンドウ化には、現在画面上に表示されている項目のみのレンダリングが含まれます。この手法は、最初のレンダリング時間を短縮し、スクロールのパフォーマンスを向上させるため、大きなリストを扱う場合に特に役立ちます。

react-virtualized や React-window などのライブラリは、React アプリケーションのウィンドウ処理の効率的な実装を提供します。

9. 画像の遅延読み込みを実装

画像の遅延読み込みにより、アプリケーションの初期読み込み時間を大幅に短縮できます。イメージが必要になるまで (つまり、ビューポートに表示される直前まで) イメージの読み込みを遅らせることで、初期バンドル サイズを削減し、知覚されるパフォーマンスを向上させることができます。

react-lazyload や react-lazy-load-image-component などのライブラリは、React アプリケーション用の使いやすい遅延読み込みソリューションを提供します。

10. 不変のデータ構造を使用する

不変のデータ構造は、詳細な等価性チェックの必要性を減らし、React のレンダリング パフォーマンスの最適化に役立ちます。不変データを使用する場合、React は詳細な比較を実行するのではなく、データの参照を比較することで、コンポーネントを再レンダリングする必要があるかどうかを迅速に判断できます。

Immutable.js や Immer などのライブラリは、React アプリケーションで不変データを操作するための不変データ構造とヘルパー関数を提供します。

結論

React のレンダリング パフォーマンスを最適化することは、スムーズで応答性の高いユーザー エクスペリエンスを提供するために重要です。これらのベスト プラクティスに従い、React の組み込み機能とフックを活用することで、ユーザーを満足させる高性能の React アプリケーションを作成できます。

アプリケーションのパフォーマンスを継続的にプロファイリングおよび測定して、ボトルネックや改善の余地がある領域を特定することを忘れないでください。 React DevTools やパフォーマンス監視ソリューションなど、React のツールとライブラリの豊富なエコシステムは、このプロセスに役立ちます。

React 開発 に関する専門家のサポートが必要な場合は、ViitorCloud Technologies に問い合わせて、熟練した ReactJS 開発者を雇用してください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/viitorcloud/react-re-rendering-best-practices-for-optimal-performance-30bo?1 侵害がある場合は、削除するために [email protected] に連絡してください。それ
最新のチュートリアル もっと>
  • ゼロから Web 開発者へ: PHP の基礎をマスターする
    ゼロから Web 開発者へ: PHP の基礎をマスターする
    PHP の基本をマスターすることが不可欠です。 PHP をインストールする PHP ファイルを作成する コードを実行する 変数とデータ型を理解する 式と演算子を使用する 実際のプロジェクトを作成してスキルを向上させる PHP 開発の入門: PHP の基本をマスターするPHP は、動的でインタラク...
    プログラミング 2024 年 11 月 5 日に公開
  • バッファ: Node.js
    バッファ: Node.js
    Node.js のバッファーの簡単なガイド Node.js の A Buffer は、生のバイナリ データを処理するために使用されます。これは、ストリーム、ファイル、またはネットワーク データを操作するときに役立ちます。 バッファの作成方法 文字列から: co...
    プログラミング 2024 年 11 月 5 日に公開
  • Node.js でのバージョン管理をマスターする
    Node.js でのバージョン管理をマスターする
    開発者として、私たちは異なる Node.js バージョンを必要とするプロジェクトに頻繁に遭遇します。このシナリオは、Node.js プロジェクトに定期的に関与していない新人開発者と経験豊富な開発者の両方にとって落とし穴です。各プロジェクトに正しい Node.js バージョンが使用されていることを確認...
    プログラミング 2024 年 11 月 5 日に公開
  • トラブルシューティングのために Go バイナリに Git リビジョン情報を埋め込む方法
    トラブルシューティングのために Go バイナリに Git リビジョン情報を埋め込む方法
    Go バイナリでの Git リビジョンの決定コードをデプロイするとき、バイナリをビルド元の Git リビジョンに関連付けると便利です。トラブルシューティングの目的。ただし、リビジョン番号を使用してソース コードを直接更新することは、ソースが変更されるため現実的ではありません。解決策: ビルド フラグ...
    プログラミング 2024 年 11 月 5 日に公開
  • 一般的な HTML タグ: 視点
    一般的な HTML タグ: 視点
    HTML (HyperText Markup Language) は Web 開発の基礎を形成し、インターネット上のすべての Web ページの構造として機能します。 2024 年には、最も一般的な HTML タグとその高度な使用法を理解することで、開発者はより効率的でアクセスしやすく、視覚的に魅力的...
    プログラミング 2024 年 11 月 5 日に公開
  • CSSメディアクエリ
    CSSメディアクエリ
    Web サイトがさまざまなデバイス間でシームレスに機能することを保証することが、これまで以上に重要になっています。ユーザーがデスクトップ、ラップトップ、タブレット、スマートフォンから Web サイトにアクセスするようになったため、レスポンシブ デザインが必須となっています。レスポンシブ デザインの中...
    プログラミング 2024 年 11 月 5 日に公開
  • JavaScript でのホイスティングを理解する: 包括的なガイド
    JavaScript でのホイスティングを理解する: 包括的なガイド
    JavaScript でのホイスティング ホイストは、変数と関数の宣言が、含まれるスコープ (グローバル スコープまたは関数スコープ) の先頭に移動 (または「ホイスト」) される動作です。コードが実行されます。これは、コード内で実際に宣言される前に変数や関数を使用できることを意味...
    プログラミング 2024 年 11 月 5 日に公開
  • Stripe を単一製品の Django Python ショップに統合する
    Stripe を単一製品の Django Python ショップに統合する
    In the first part of this series, we created a Django online shop with htmx. In this second part, we'll handle orders using Stripe. What We'll...
    プログラミング 2024 年 11 月 5 日に公開
  • Laravel でキューに入れられたジョブをテストするためのヒント
    Laravel でキューに入れられたジョブをテストするためのヒント
    Laravel アプリケーションを使用する場合、コマンドが負荷の高いタスクを実行する必要があるシナリオに遭遇するのが一般的です。メインプロセスのブロックを避けるために、キューで処理できるジョブにタスクをオフロードすることを決定することもできます。 例を見てみましょう。コマンド app:import-...
    プログラミング 2024 年 11 月 5 日に公開
  • 人間レベルの自然言語理解 (NLU) システムを作成する方法
    人間レベルの自然言語理解 (NLU) システムを作成する方法
    Scope: Creating an NLU system that fully understands and processes human languages in a wide range of contexts, from conversations to literature. ...
    プログラミング 2024 年 11 月 5 日に公開
  • JSTL を使用して HashMap 内で ArrayList を反復するにはどうすればよいですか?
    JSTL を使用して HashMap 内で ArrayList を反復するにはどうすればよいですか?
    JSTL を使用した HashMap 内の ArrayList の反復Web 開発では、JSTL (JavaServer Pages Standard Tag Library) は、JSP での一般的なタスクを簡素化するためのタグのセットを提供します ( Javaサーバーページ)。そのようなタスクの...
    プログラミング 2024 年 11 月 5 日に公開
  • Encore.ts — ElysiaJS や Hono よりも高速
    Encore.ts — ElysiaJS や Hono よりも高速
    数か月前、私たちは TypeScript 用のオープンソース バックエンド フレームワークである Encore.ts をリリースしました。 すでに多くのフレームワークが存在するため、私たちが行った珍しい設計上の決定のいくつかと、それがどのようにして驚くべきパフォーマンス数値につながるのかを共有したい...
    プログラミング 2024 年 11 月 5 日に公開
  • + を使用した文字列連結が文字列リテラルで失敗するのはなぜですか?
    + を使用した文字列連結が文字列リテラルで失敗するのはなぜですか?
    文字列リテラルと文字列の連結C では、演算子を使用して文字列と文字列リテラルを連結できます。ただし、この機能には混乱を招く可能性のある制限があります。質問の中で、作成者は文字列リテラル「Hello」、「,world」、および「!」を連結しようとしています。 2つの異なる方法で。最初の例:const ...
    プログラミング 2024 年 11 月 5 日に公開
  • React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス
    React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス
    React の効率的なレンダリング メカニズムは、その人気の主な理由の 1 つです。ただし、アプリケーションが複雑になるにつれて、コンポーネントの再レンダリングの管理がパフォーマンスを最適化するために重要になります。 React のレンダリング動作を最適化し、不必要な再レンダリングを回避するためのベ...
    プログラミング 2024 年 11 月 5 日に公開
  • 条件付き列の作成を実現する方法: Pandas DataFrame で If-Elif-Else を探索する?
    条件付き列の作成を実現する方法: Pandas DataFrame で If-Elif-Else を探索する?
    条件付き列の作成: Pandas の If-Elif-Else指定された問題では、新しい列を DataFrame に追加することが求められます一連の条件付き基準に基づいて決定されます。課題は、コードの効率性と可読性を維持しながらこれらの条件を実装することにあります。関数アプリケーションを使用したソリ...
    プログラミング 2024 年 11 月 5 日に公開

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

Copyright© 2022 湘ICP备2022001581号-3