R初めてのReact

Day 3リスト・条件・フォーム — 実データを画面に出す

配列を map で一覧に変換する(key の役割)

JavaScript の map で配列を JSX の要素へ変換し、なぜ key が必要なのかを理解する。

データの配列を、そのまま画面のリストにする

実務の画面は「サーバーから届いた配列を並べて表示する」ものだらけです。商品一覧、コメント一覧、通知一覧、どれも中身は配列です。React では、この配列を JavaScript の map で JSX の要素の配列に変換して、そのまま画面に置きます。Day3 で学んだ JS の map が、ここでそのまま生きます。

TSX
const fruits = ["りんご", "みかん", "ぶどう"];

function FruitList() {
  return (
    <ul>
      {fruits.map((fruit) => (
        <li>{fruit}</li>
      ))}
    </ul>
  );
}
配列を map で <li> の配列に変換し、そのまま <ul> の中に置く

ポイントは、map が返すのが「JSX 要素の配列」だということです。React は配列を渡されると、その中身を順番に並べて描画してくれます。だから for 文で組み立てる必要はなく、map の結果を波かっこ {} でそのまま埋め込むだけで一覧になります。

ただし、上のコードを動かすと React が警告を出します。「リストの各項目には key が必要です」というものです。map で作った各要素には、どれがどれかを見分けるための目印 key を付ける決まりになっています。

TSX
const users = [
  { id: 1, name: "佐藤" },
  { id: 2, name: "鈴木" },
];

function UserList() {
  return (
    <ul>
      {users.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}
各要素に key={user.id} を付ける。id のような一意な値を使う

なぜ key が必要なのか

リストは追加・削除・並び替えで中身が動きます。React は再描画のとき、前回のリストと今回のリストを見比べて「どれが同じ項目か」を判断します。key はその照合の目印です。key があれば「この項目は同じで、位置だけ変わった」と正しく判断でき、無駄な作り直しを避けて速く・正確に更新できます。

index を key にするのは基本 NG

map の第2引数の index(0,1,2...)を key にしたくなりますが、並び替えや途中の削除があると「同じ index が別の項目を指す」ようになり、表示崩れや入力値の取り違えが起きます。key には、その項目に固有で変わらない値(id など)を使ってください。どうしても id が無い場合の一時しのぎ以外では index を避けます。

index を key にする

並び替え・削除で挙動が壊れやすい

TSX
{items.map((item, index) => (
  <li key={index}>{item.name}</li>
))}

一意な id を key にする

項目が動いても正しく追跡できる

TSX
{items.map((item) => (
  <li key={item.id}>{item.name}</li>
))}
  • 配列 → map で JSX 要素の配列に変換 → {} で埋め込むと一覧になる
  • map で作った各要素には key を付ける(React の決まり)
  • key には id のような一意で不変な値を使う。index は避ける
  • key は React が項目を照合するための目印であって、画面には表示されない

AIにはこう聞く

「このユーザー配列(id と name を持つ)を <ul><li> の一覧で表示する React コンポーネントを書いて。key は id を使って」と伝えると、正しい形で返ってきます。警告が出たら「key の警告が出た。原因と直し方を教えて」と続けて聞きましょう。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

配列を画面のリストに変換するとき、React で一般的に使うのはどれ?

Q2

リストの key に使う値として最も適切なのはどれ?

Q3

リストに key を付ける理由を、再描画のしくみに触れながら説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。