【入門編】 リストレンダリングとkeyプロパティの重要性 – React実践ガイド

こんにちは。フロントエンドの現場で長年Reactと向き合っていると、ふと「なぜこんなルールがあるのか?」という原点に立ち返ることがあります。

Reactを学び始めたばかりの頃、特に「リストレンダリング」と「keyプロパティ」の壁にぶつかって、「なぜindexを入れちゃダメなの?」と悩む人は本当に多いです。でも、大丈夫。これらはReactが画面を効率よく、そして正確に描画するための「大切な約束事」に過ぎません。

今日は、その仕組みを一緒に紐解いていきましょう。

—

1. 魔法の「map関数」でリストを作ろう

Reactでリストを表示するとき、私たちはよく `map` 関数を使います。これは、「お皿が並んでいるところに、料理を一つずつ載せていく」作業に似ています。

例えば、買い物リストを作るとしましょう。

const shoppingList = [“りんご”, “バナナ”, “みかん”];

function ShoppingCart() {
return (

    {/ map関数を使って、配列の中身を一つずつ

  • タグに変換します /}
    {shoppingList.map((item) => (

  • {item}
  • ))}

);
}

これで画面には綺麗にリストが並びます。でも、ブラウザのコンソールを開くと、Reactから「警告(Warning)」が出ていませんか?
「各要素には一意の key プロパティを指定してください」と。

これこそが、今日一番伝えたい「keyの秘密」です。

—

2. なぜ「key」がないとダメなの?(名札の役割)

想像してみてください。あなたは巨大なスーパーの店長です。棚に並んだ「りんご、バナナ、みかん」の袋に、何も名前が書いていないとします。

もし、途中で「バナナ」を「ぶどう」に変えたとき、あるいは順番を入れ替えたとき、店長であるReactはどれがどれだか分からなくなってしまいます。「あれ? さっきの袋はどこに行った?」とパニックになり、結局全部の袋を一旦片付けて、並べ直すという非効率な作業をしてしまうんです。

ここで登場するのが `key` という名札 です。

  • keyがある場合: 「これは『りんご』というIDの袋」「これは『バナナ』というIDの袋」と識別できるので、変更があった箇所だけをピンポイントで差し替えれば済みます。
  • keyがない(または不適切)場合: 全要素を一旦削除して、再作成するような無駄な動き(再レンダリングの暴走)が発生します。

—

3. 実践:正しいkeyの付け方

よくやってしまいがちなのが、「とりあえず配列のインデックス(0, 1, 2…)」をkeyにしてしまうこと。でも、リストの並び順が変わる可能性があるなら、それは危険です。

「変わらない、その要素固有のID」を使うのがプロの鉄則です。

const items = [
{ id: ‘a1’, name: ‘りんご’ },
{ id: ‘b2’, name: ‘バナナ’ },
{ id: ‘c3’, name: ‘みかん’ }
];

function ItemList() {
return (

    {items.map((item) => (
    // indexではなく、データの固有IDをkeyとして渡します

  • {item.name}
  • ))}

);
}

なぜインデックス(index)を使ってはいけないの?

例えば、一番上に「いちご」を追加したとします。
インデックスを使っていると、元々「0番目」だった「りんご」が、急に「1番目」にズレますよね。するとReactは、「0番目の『りんご』が『いちご』に変わった!」と勘違いして、無駄な更新処理を走らせてしまうんです。

「中身が変わっても、その要素はあなた自身ですよね」と証明できる ID を使うこと。 これが React を賢く動かすコツです。

—

まとめ:Reactとお友達になるために

ここまで読んでくださったあなたは、もうReactの「差分検出アルゴリズム(Virtual DOM)」という少し難しい概念の、本質的な部分を理解しています。

  • リストを作るときは `map` を使う。
  • 各要素には、必ず一意の `key`(名札)を付ける。
  • `key` には、インデックスではなく、IDなどの固有の値を使う。

この3つを守るだけで、あなたの作るアプリケーションは驚くほど軽快で、バグの少ないものになります。

最初は難しく感じるかもしれませんが、現場のエンジニアもみんな同じ道を通ってきました。まずは「画面にリストを出すとき、この要素を識別する名札はあるかな?」と考える癖をつけてみてください。

もしまた詰まったら、いつでも戻ってきてくださいね。一緒に少しずつ、Reactマスターへの階段を登っていきましょう!

コメント

タイトルとURLをコピーしました