カテゴリ: React 更新日: 2026/01/28

Reactのリストとキーを基礎から理解!keyの衝突を防ぐための戦略をやさしく解説

keyの衝突を防ぐための戦略
keyの衝突を防ぐための戦略

先生と生徒の会話形式で理解しよう

生徒

「Reactでリストを表示すると、keyが必要って言われるんですが、なぜなんですか?」

先生

「keyは、画面の中の部品を見分けるための目印のようなものです」

生徒

「同じkeyを使うとダメって聞いたんですが、どうしてですか?」

先生

「それが、keyの衝突と呼ばれる問題です。今日はそれを防ぐ考え方を説明します」

1. Reactにおけるkeyの役割とは

1. Reactにおけるkeyの役割とは
1. Reactにおけるkeyの役割とは

Reactのリスト表示では、 それぞれの要素にkeyを指定します。

keyは、 人で言えば名札のようなものです。 誰が誰なのかを区別するために使われます。

Reactは、 画面が変わったときに、 どの部分を更新すればよいかを keyを見て判断しています。

2. keyの衝突とは何か

2. keyの衝突とは何か
2. keyの衝突とは何か

keyの衝突とは、 同じリストの中で、 同じkeyが複数使われてしまう状態です。

これは、 クラスに同じ番号のロッカーが 二つあるようなものです。 どちらの持ち物か分からなくなります。

Reactでも、 表示がずれたり、 意図しない動きをする原因になります。

3. よくある間違い:indexをそのまま使う

3. よくある間違い:indexをそのまま使う
3. よくある間違い:indexをそのまま使う

初心者がよくやってしまうのが、 配列の番号をkeyにする方法です。


function App() {
  const items = ["りんご", "みかん", "ばなな"];

  return (
    <ul>
      {items.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
}
(果物の名前がリストで表示されます)

この方法は、 表示が固定されている場合は動きますが、 並び替えや削除があると問題が起きやすくなります。

4. 一意なIDを使うのが基本戦略

4. 一意なIDを使うのが基本戦略
4. 一意なIDを使うのが基本戦略

keyの衝突を防ぐ一番の方法は、 そのデータ専用のIDを使うことです。

一意とは、 他と絶対に重ならないという意味です。


function App() {
  const items = [
    { id: 1, name: "赤" },
    { id: 2, name: "青" },
    { id: 3, name: "黄色" }
  ];

  return (
    <ul>
      {items.map(item => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
}
(色の名前が正しくリスト表示されます)

5. 表示専用の文字列をkeyに使う考え方

5. 表示専用の文字列をkeyに使う考え方
5. 表示専用の文字列をkeyに使う考え方

データにIDがない場合でも、 内容が絶対に重ならないなら、 文字列をkeyに使うことができます。


function App() {
  const animals = ["ねこ", "いぬ", "ぞう"];

  return (
    <ul>
      {animals.map(animal => (
        <li key={animal}>{animal}</li>
      ))}
    </ul>
  );
}
(動物の名前が安定して表示されます)

6. なぜkeyの衝突がパフォーマンスにも影響するのか

6. なぜkeyの衝突がパフォーマンスにも影響するのか
6. なぜkeyの衝突がパフォーマンスにも影響するのか

Reactは、 画面の差分だけを更新する仕組みを持っています。

keyが正しく設定されていないと、 本来不要な部分まで 作り直してしまうことがあります。

その結果、 動きが遅くなったり、 画面がちらつく原因になります。

7. keyを決めるときの考え方まとめ

7. keyを決めるときの考え方まとめ
7. keyを決めるときの考え方まとめ

keyは、 変わらない、 重ならない、 意味のある値を選ぶことが大切です。

番号を適当に使うより、 データそのものを表す値を使うことで、 トラブルを防ぐことができます。

これを意識するだけで、 Reactのリスト表示は ぐっと安定します。

カテゴリの一覧へ
新着記事
New1
React
Reactで再利用可能なリスト表示コンポーネントを実装しよう!初心者でもわかるReactのコンポーネント分割
New2
React
ReactのPropsとStateのベストプラクティスを整理しよう!初心者でもわかる使い方ガイド
New3
Next.js
Next.jsのRoute Groupの使い方を完全ガイド!App Routerでフォルダ構成を整理する方法
New4
Next.js
Next.js App Routerのtemplate.tsxの役割を完全解説!初心者でも理解できるレイアウト管理の基本
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.3
Java&Spring記事人気No3
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.4
Java&Spring記事人気No4
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.5
Java&Spring記事人気No5
Next.js
Next.js Server Componentsのメリット・デメリットを完全解説!初心者でもわかるNext.jsの基本
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactでAxiosローディング状態を管理する方法を完全ガイド!初心者でもわかる非同期通信の基本
No.8
Java&Spring記事人気No8
React
ReactでuseStateを使ったオブジェクト・配列の扱い方完全ガイド!初心者でもわかるReactフック