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

Reactのリストとkeyを完全解説!初心者でもわかるネストされたリストのレンダリング方法

ネストされたリストをレンダリングする方法
ネストされたリストをレンダリングする方法

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

生徒

「Reactでリストを表示できるようになったんですが、リストの中にさらにリストがある場合はどうするんですか?」

先生

「それはネストされたリストですね。Reactでも問題なく表示できます。」

生徒

「mapが二回出てきたりして、急に難しく感じます…。」

先生

「順番に考えれば大丈夫です。身近な例に置き換えながら説明します。」

1. ネストされたリストとは何か

1. ネストされたリストとは何か
1. ネストされたリストとは何か

ネストとは「入れ子」という意味です。 ネストされたリストとは、リストの中にさらに別のリストが入っている状態を指します。 たとえば、学校のクラス一覧があり、その中に生徒の名前一覧がある場合などが該当します。

現実世界ではよく見かける構造ですが、プログラミング初心者にとっては急に難しく感じやすい部分です。 しかし、Reactでは基本のリスト表示を理解していれば、考え方は同じです。

大切なのは「外側のリストを一つずつ表示し、その中で内側のリストを表示する」という順番です。 焦らず、一段ずつ階段を上るように考えましょう。

2. シンプルなネストされたデータ構造

2. シンプルなネストされたデータ構造
2. シンプルなネストされたデータ構造

ネストされたリストを扱うためには、まずデータの形を理解する必要があります。 Reactでは、配列とオブジェクトを組み合わせたデータをよく使います。

たとえば、「カテゴリ」と「その中の商品」という関係は、ネスト構造の代表例です。 外側がカテゴリの一覧で、内側が商品リストという形になります。

このようなデータ構造をそのまま画面に反映できるのが、Reactの便利なところです。

3. ネストされたリストをmapで表示する基本例

3. ネストされたリストをmapで表示する基本例
3. ネストされたリストをmapで表示する基本例

import React from "react";

function App() {
  const categories = [
    {
      id: 1,
      name: "果物",
      items: ["りんご", "みかん", "ぶどう"]
    },
    {
      id: 2,
      name: "野菜",
      items: ["にんじん", "じゃがいも"]
    }
  ];

  return (
    <div>
      {categories.map(category => (
        <div key={category.id}>
          <h3>{category.name}</h3>
          <ul>
            {category.items.map(item => (
              <li key={item}>{item}</li>
            ))}
          </ul>
        </div>
      ))}
    </div>
  );
}

export default App;
(「果物」「野菜」という見出しの下に、それぞれの項目がリスト表示されます)

この例では、外側のmapでカテゴリを表示し、内側のmapで項目を表示しています。 mapが二回出てきますが、それぞれ役割が違うだけです。

外側は「カテゴリを一つずつ表示する係」、内側は「その中身を表示する係」と考えると分かりやすくなります。

4. ネストされたリストとkeyの考え方

4. ネストされたリストとkeyの考え方
4. ネストされたリストとkeyの考え方

ネストされたリストでも、keyは必ず必要です。 keyはReactが要素を区別するための目印でした。

外側のリストにはカテゴリ専用のkeyを、内側のリストには項目専用のkeyを設定します。 同じ画面内で重ならなければ問題ありません。

初心者のうちは「どのmapにどのkeyを付けるのか」を意識するだけで十分です。 無理に難しいことを考える必要はありません。

5. オブジェクトを使ったネスト例

5. オブジェクトを使ったネスト例
5. オブジェクトを使ったネスト例

import React from "react";

function App() {
  const classes = [
    {
      classId: "a",
      className: "1年1組",
      students: [
        { id: 1, name: "たろう" },
        { id: 2, name: "はなこ" }
      ]
    }
  ];

  return (
    <div>
      {classes.map(cls => (
        <div key={cls.classId}>
          <h3>{cls.className}</h3>
          <ul>
            {cls.students.map(student => (
              <li key={student.id}>{student.name}</li>
            ))}
          </ul>
        </div>
      ))}
    </div>
  );
}

export default App;
(クラス名の下に生徒の名前が一覧で表示されます)

このように、内側がオブジェクトの配列であっても考え方は同じです。 データの形に合わせてmapを使い分けるだけで、画面は正しく表示されます。

6. ネストされたリストを扱うときの心構え

6. ネストされたリストを扱うときの心構え
6. ネストされたリストを扱うときの心構え

ネストされたリストは、一気に理解しようとすると混乱しやすい部分です。 まずは外側だけ、次に内側だけ、と分けて考えることが大切です。

紙にデータ構造を書いてみたり、現実の例に置き換えて考えると理解が進みます。 Reactのリスト処理は、慣れるほど自然に読めるようになります。

ネストされたリストを表示できるようになると、実用的な画面を作れるようになります。 一歩ずつ理解を積み重ねていきましょう。

カテゴリの一覧へ
新着記事
New1
React
Reactのカスタムフックで依存関係を扱う方法を解説!初心者でもわかる依存関係管理
New2
Next.js
Next.js Client Componentsでフォーム入力を扱う実装パターン完全ガイド!初心者でもわかるNext.jsフォーム処理
New3
React
Fetch APIでPOSTリクエストを送る方法を完全解説!初心者でもわかるReactのデータ送信
New4
React
useEffectでクリーンアップ関数を使う方法をやさしく解説
人気記事
No.1
Java&Spring記事人気No1
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.2
Java&Spring記事人気No2
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.3
Java&Spring記事人気No3
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.4
Java&Spring記事人気No4
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.5
Java&Spring記事人気No5
React
useEffectでクリーンアップ関数を使う方法をやさしく解説
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介