1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[React]リストのレンダーとkeyについて

Posted at

データの集まりから、似たようなコンポーネントを複数表示させたい時に、filter()map()といったJavaScriptの配列メソッドが使用できる。
この時に、配列の各アイテムにはkeyを渡す必要がある。

配列の各アイテムにkeyを渡さないと、以下のようなエラーがコンソールに表示される

スクリーンショット 2025-01-25 17.28.53.png

keyが必要な理由

  • 配列のどの要素がどのコンポーネントに対応するのかをReactが判断し、正しく更新するために必要
  • 適切にkeyを選ぶことで、Reactは何が起こったか推測し、DOMツリーに正しい更新を反映させることができる
    • 配列の要素の移動
    • 要素の挿入
    • 要素の削除

keyの種類

  • DBからのデータの場合、DBのキーやIDは必然的に一意になるので、それを利用する
  • ローカルで生成された場合、アイテムを作成する際に、インクリメンタルなカウンタはuuidなどのパッケージを使用する

keyのルール

  • キーは兄弟間で一意である必要がある
  • キーは変更してはいけない

keyとして指定してはいけないもの

  • アイテムのインデックス
    • アイテムが挿入されたり削除されたりすると、レンダーするアイテムの順序が変わる。そのためインデックスをキーとして利用すると、バグの原因になる
  • その場で生成したキー
    • key={Math.random()}のようにその場で生成してはいけない。こうすると、レンダーごとにキーが合致しなくなり、コンポーネントとDOMが毎回再作成されるようになってしまう
    • 表示が遅くなったり、リストアイテム内の入力値も失われてしまう
  • keyはReact自体がヒントとして使用するだけで、コンポーネントのpropsとして受け取らない。コンポーネントがIDを必要とする場合は、別のpropsとして渡す必要がある

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?