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

Reactでkey属性にインデックスを使う際の注意点を初心者向けに解説

key属性にインデックスを使う際の注意点
key属性にインデックスを使う際の注意点

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

生徒

「Reactでリストを表示するとき、keyにindexを使ってもいいって聞いたんですが、本当に大丈夫なんですか?」

先生

「使える場合もありますが、注意しないと困った動きになることがあります。」

生徒

「画面はちゃんと表示されるのに、何が問題なんでしょうか?」

先生

「Reactの仕組みとあわせて、分かりやすく説明しますね。」

1. key属性とインデックスの基本をおさらい

1. key属性とインデックスの基本をおさらい
1. key属性とインデックスの基本をおさらい

Reactで配列データを画面に表示するとき、key属性が必要になります。 key属性は、それぞれの表示要素を区別するための目印です。 人が集まるイベントで、名札を付けて誰が誰か分かるようにするのと同じ考え方です。

インデックスとは、配列の順番を表す番号のことです。 最初は0、次は1というように、自動で番号が割り振られます。 map関数では、このインデックスを簡単に使えるため、初心者はkeyに指定しがちです。

2. インデックスをkeyに使った基本的な例

2. インデックスをkeyに使った基本的な例
2. インデックスをkeyに使った基本的な例

まずは、インデックスをkeyに使ったシンプルな例を見てみましょう。 一見すると、何も問題がないように見えます。


import React from "react";

function App() {
  const fruits = ["りんご", "バナナ", "みかん"];

  return (
    <div>
      <h1>フルーツ一覧</h1>
      <ul>
        {fruits.map((fruit, index) => (
          <li key={index}>{fruit}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;
(画面にフルーツの名前が順番に表示されます)

このように、表示するだけであれば、インデックスをkeyにしても問題は起きません。 そのため、初心者のうちは「これで大丈夫」と思ってしまいがちです。

3. なぜインデックスをkeyにすると問題が起きるのか

3. なぜインデックスをkeyにすると問題が起きるのか
3. なぜインデックスをkeyにすると問題が起きるのか

問題が起きるのは、リストの中身が途中で変わったときです。 Reactは、keyをもとに「どの要素が変わったか」を判断しています。

インデックスは順番を表す数字なので、 リストの途中に新しい要素が入ったり、削除されたりすると、 後ろの要素の番号がすべてずれてしまいます。 その結果、Reactは別の要素だと勘違いしてしまいます。

4. インデックスkeyで起きやすいトラブル例

4. インデックスkeyで起きやすいトラブル例
4. インデックスkeyで起きやすいトラブル例

たとえば、入力フォーム付きのリストを考えてみましょう。 入力途中のデータが、別の行に移動してしまうことがあります。 これは、Reactがkeyを頼りに要素を管理しているためです。


import React, { useState } from "react";

function App() {
  const [items, setItems] = useState(["A", "B", "C"]);

  return (
    <div>
      <ul>
        {items.map((item, index) => (
          <li key={index}>
            <input defaultValue={item} />
          </li>
        ))}
      </ul>
    </div>
  );
}

export default App;
(リストの順番を変更すると、入力内容がずれることがあります)

見た目では分かりにくいですが、内部ではReactが混乱しています。 これが、インデックスをkeyに使う最大の注意点です。

5. インデックスkeyが許されるケース

5. インデックスkeyが許されるケース
5. インデックスkeyが許されるケース

すべての場合で、インデックスkeyがダメというわけではありません。 リストの順番が変わらない、追加や削除がない場合は、大きな問題になりにくいです。

たとえば、固定された説明文の一覧や、完全に静的な表示などです。 ただし、後から機能を追加する可能性がある場合は、最初から安全な方法を選ぶ方が安心です。

6. インデックスの代わりに使うべきkey

6. インデックスの代わりに使うべきkey
6. インデックスの代わりに使うべきkey

もっともおすすめなのは、idのような一意の値をkeyに使うことです。 一意とは、他と重ならないという意味です。 学生番号や会員番号を思い浮かべると分かりやすいでしょう。


import React from "react";

function App() {
  const users = [
    { id: 1, name: "たろう" },
    { id: 2, name: "はなこ" },
    { id: 3, name: "じろう" }
  ];

  return (
    <div>
      <h1>ユーザー一覧</h1>
      <ul>
        {users.map((user) => (
          <li key={user.id}>{user.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;
(順番が変わっても、正しく表示され続けます)

この方法なら、リストの順番が変わってもReactは正しく判断できます。 安定した動作につながるため、実務でもよく使われています。

7. 初心者が覚えておきたい考え方

7. 初心者が覚えておきたい考え方
7. 初心者が覚えておきたい考え方

インデックスをkeyに使うと、最初は楽に書けます。 しかし、あとで機能を追加したときに、思わぬ不具合の原因になります。

「今は大丈夫」ではなく、「あとで変わるかもしれない」と考えることが大切です。 Reactでは、keyは表示のためではなく、内部管理のための重要な情報です。 その役割を理解することで、より安全なコードが書けるようになります。

カテゴリの一覧へ
新着記事
New1
React
Reactのフォーム入力を再利用しよう!初心者でもわかるフィールドコンポーネント化の考え方
New2
React
Reactでできること一覧!初心者でもわかるWebアプリ・スマホアプリ・PWAの活用方法
New3
React
React.jsが人気な理由!VueやAngularとの違いを初心者向けに徹底比較
New4
Next.js
Next.js×StorybookでUI開発環境を整える方法!初心者でもわかるNext.jsの環境構築
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.3
Java&Spring記事人気No3
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.4
Java&Spring記事人気No4
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.5
Java&Spring記事人気No5
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.6
Java&Spring記事人気No6
Next.js
Next.js Server Componentsのメリット・デメリットを完全解説!初心者でもわかるNext.jsの基本
No.7
Java&Spring記事人気No7
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.8
Java&Spring記事人気No8
React
Reactのカードコンポーネントを汎用的に設計する方法!初心者でもわかる再利用の考え方