Day 3・リスト・条件・フォーム — 実データを画面に出す
配列を map で一覧に変換する(key の役割)
JavaScript の map で配列を JSX の要素へ変換し、なぜ key が必要なのかを理解する。
データの配列を、そのまま画面のリストにする
実務の画面は「サーバーから届いた配列を並べて表示する」ものだらけです。商品一覧、コメント一覧、通知一覧、どれも中身は配列です。React では、この配列を JavaScript の map で JSX の要素の配列に変換して、そのまま画面に置きます。Day3 で学んだ JS の map が、ここでそのまま生きます。
const fruits = ["りんご", "みかん", "ぶどう"];
function FruitList() {
return (
<ul>
{fruits.map((fruit) => (
<li>{fruit}</li>
))}
</ul>
);
}ポイントは、map が返すのが「JSX 要素の配列」だということです。React は配列を渡されると、その中身を順番に並べて描画してくれます。だから for 文で組み立てる必要はなく、map の結果を波かっこ {} でそのまま埋め込むだけで一覧になります。
ただし、上のコードを動かすと React が警告を出します。「リストの各項目には key が必要です」というものです。map で作った各要素には、どれがどれかを見分けるための目印 key を付ける決まりになっています。
const users = [
{ id: 1, name: "佐藤" },
{ id: 2, name: "鈴木" },
];
function UserList() {
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}なぜ key が必要なのか
リストは追加・削除・並び替えで中身が動きます。React は再描画のとき、前回のリストと今回のリストを見比べて「どれが同じ項目か」を判断します。key はその照合の目印です。key があれば「この項目は同じで、位置だけ変わった」と正しく判断でき、無駄な作り直しを避けて速く・正確に更新できます。
index を key にするのは基本 NG
map の第2引数の index(0,1,2...)を key にしたくなりますが、並び替えや途中の削除があると「同じ index が別の項目を指す」ようになり、表示崩れや入力値の取り違えが起きます。key には、その項目に固有で変わらない値(id など)を使ってください。どうしても id が無い場合の一時しのぎ以外では index を避けます。
index を key にする
並び替え・削除で挙動が壊れやすい
{items.map((item, index) => (
<li key={index}>{item.name}</li>
))}一意な id を key にする
項目が動いても正しく追跡できる
{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に噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
配列を画面のリストに変換するとき、React で一般的に使うのはどれ?
リストの key に使う値として最も適切なのはどれ?
リストに key を付ける理由を、再描画のしくみに触れながら説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。