window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() Reactキー、はい!鍵は必要だが、なぜ必要なのか?- The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2021-10-12
ソフトウェア開発

Reactキー、はい!しかし、なぜ必要なのか?

プシェミスワフ・アダムチク

Reactで配列を要素のリストに変換するのはとても簡単で、基本的には配列をマップして、配列の各項目に対して適切な要素を返すだけでいい。

もうひとつ、覚えておかなければならないことがある。 Reactキー 属性を使用する場合、レンダリングされるリストの各要素はこの属性を持たなければなりません。この概念は、フロントエンド開発者が最初に学ぶことのひとつです。 React 旅のスタート地点ででは、なぜそうなのか、どんなときに近道ができるのか、もう少し掘り下げて考えてみよう。

なぜこのキー属性が必要なのか?

ここでの最も単純な答えは「再レンダリングを最適化すること」だろうが、より完全な答えは、少なくとも以下の概念に言及しなければならない。 React照合.これは、最も効率的な方法でUIを更新する方法を見つけ出すプロセスだ。それを素早く行うために React は、要素ツリーのどの部分を更新し、どの部分を更新しないかを決定しなければならない。DOMにはたくさんの要素があり、どれを更新すべきかを決定するためにそれぞれの要素を比較するのは、かなり手間がかかる。これを最適化するには React は、2つの仮定に基づくdiffingアルゴリズムを実装している:

  1. 2つの異なるタイプのエレメントは決して同じにはならない。
  2. 開発者は、キー属性を介して手動でそのプロセスを最適化することができるため、要素の順序が変わったとしても、より速くローカライズして比較することができる。

このことから、次のように結論づけることができる。 Reactキー また、(グローバルではなく、要素のリスト内で)一意でなければならず、(変化してはならない)安定したものでなければならない。しかし、もしそれが一意でなかったらどうなるだろうか?

一意性、安定性、配列インデックス

前にも述べたように、 Reactキー は安定して一意でなければならない。これを実現する最も簡単な方法は、(例えばデータベースから)一意なIDを使用し、配列をマッピングする際に各要素にそれを渡すことです。しかし、各要素に渡すIDや名前などの一意な識別子がない場合はどうすればいいのでしょうか?キーとして何も渡さなければいい、 React はデフォルトで現在の配列のインデックスを取り(リスト内で一意であるため)、それを処理してくれるが、コンソールに素敵なエラーメッセージも表示してくれる:

なぜそうなるのか?答えは、配列のインデックスが安定しないからだ。要素の順番が変われば、それぞれのキーも変わってしまい、問題が発生する。もし React 要素のリストの順番が変更された場合でも、キーで比較しようとするため、比較のたびにコンポーネントが再構築され、結果的にリスト全体がゼロから再構築されることになります。それに加えて、制御されていない入力のような要素に対するコンポーネントの状態の更新や、その他の不思議なデバッグしにくい問題のような、予期せぬ問題に遭遇することもあります。

例外

配列のインデックスに戻ろう。これを Reactキー がこれほど問題になるのはなぜか。 React はデフォルトで使用するのでしょうか?そうしても問題ないユースケースはあるのでしょうか?答えはイエスで、その使用例は静的リストです。レンダリングするリストの順番が変わることがないのであれば、array indexを使っても問題ありませんが、一意な識別子がある場合は、それを使ったほうがよいことを覚えておいてください。また、インデックスをキーとして渡すと React のエラーメッセージは消えますが、同時に外部リンターのいくつかはエラーや警告を表示します。これは、インデックスをキーとして明示的に使用することは悪い習慣とみなされ、いくつかのリンターがエラーとして扱う可能性があるという事実によるものです。 React そのため、本当に自分が何をしているかわかっているのでなければ、そのようなことはしないでください。 この例外を使ってもいい場合の例としては、静的なボタンリストを持つドロップダウンや、会社の住所情報を持つ要素のリストを表示する場合などがあります。

データセットベースのキーに代わるもの

例えば、文字列の配列に基づいて要素のリストを表示しなければならない。例えば、文字列の配列に基づいて要素のリストを表示する必要があり、その配列は重複する可能性があるが、並び替えることもできる。この場合、文字列は一意ではないのでどれも使えないし(これは魔法のようなバグを引き起こす可能性もある)、配列のインデックスも要素の順番を変えてしまうので十分ではない。このような状況で最後に頼りになるのは、外部識別子を使うことだ。Math.random()を使うわけにはいかないので、安定したものでなければならないことを忘れないでほしい。このような場合に使えるNPMパッケージがいくつかあります。 「uuid パッケージを使用する。このようなツールは、データセット内に適切な識別子が見つからない場合でも、リストキーを安定かつ一意に保つのに役立ちます。で使用するパッケージの数を最小限にするために、データベースIDと配列インデックス(可能であれば)を最初に使用することを検討すべきです。 プロジェクト.

最後に

  • のリスト上の各要素は React 要素は一意で安定したキー属性を持つべきである、
  • Reactキー を高速化するために使用される。 調整プロセス そして、リスト上の要素の不必要な再構築を避ける、
  • キーのソースとして最適なのは、(例えばデータベースからの)データ入力一意のIDである、
  • 配列のインデックスをキーとして使うこともできるが、それは順番が変わらない静的リストに対してのみである、
  • 安定した一意なキーを取得する方法が他にない場合は、外部のIDプロバイダー、たとえば「uuid」パッケージの利用を検討しよう。

続きを読む

おそらく)Typescriptを使うべき理由

悪いコーディング・プラクティスでプロジェクトを潰さないためには?

NextJSのデータフェッチ戦略

関連記事

ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト
エンタープライズ&スケールアップ・ソリューション

IT監査ツール&テクニック完全ガイド

IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese