Reactのリストとキーを完全理解!リストレンダリングと状態管理の組み合わせ入門
生徒
「Reactでリストを表示するのは分かってきましたが、ボタンを押して中身を変えるときはどうするんですか?」
先生
「その場合は、リスト表示と状態管理を組み合わせて考えます」
生徒
「状態管理って難しそうです…」
先生
「仕組みを一つずつ見ていけば、身近な操作と同じだと分かりますよ」
1. リストレンダリングと状態管理とは
Reactで画面に複数のデータを 並べて表示することを リストレンダリングと呼びます。
一方で、 画面の内容を記憶して 変化させる仕組みが 状態管理です。
状態とは、 今どんなデータを 表示しているかを Reactが覚えている メモのようなものです。
2. 状態を使わないリスト表示の基本
まずは、 状態を使わない シンプルな リスト表示を見ます。
function App() {
const fruits = ["りんご", "みかん", "バナナ"];
return (
<ul>
{fruits.map(fruit => (
<li key={fruit}>{fruit}</li>
))}
</ul>
);
}
この方法は 表示するだけなら 十分ですが、 中身を変えることは できません。
3. 状態管理をイメージで理解する
状態管理は、 ホワイトボードに 書いた内容を 消したり書き直したり するイメージです。
書き換えた瞬間に、 それを見ている人全員に 新しい内容が 見えるようになります。
Reactでは、 useStateという仕組みで この役割を実現します。
4. 状態を使ってリストを表示する
次に、 状態として リストを管理する 例を見てみます。
import React, { useState } from "react";
function App() {
const [items, setItems] = useState(["ねこ", "いぬ"]);
return (
<ul>
{items.map(item => (
<li key={item}>{item}</li>
))}
</ul>
);
}
export default App;
この場合、 リストの中身は 状態として Reactが覚えています。
5. ボタン操作でリストを変更する
状態管理の強みは、 ユーザーの操作で 画面が変わることです。
ボタンを押して リストに データを追加する 例を見ます。
import React, { useState } from "react";
function App() {
const [items, setItems] = useState(["パン", "ごはん"]);
const addItem = () => {
setItems([...items, "めん"]);
};
return (
<div>
<button onClick={addItem}>追加</button>
<ul>
{items.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</div>
);
}
export default App;
6. keyが重要になる理由
リストと状態管理を 組み合わせると、 表示内容が 頻繁に変わります。
そのとき、 Reactがどの要素が どれなのかを 判断するために keyを使います。
keyは、 名札のような役割を持ち、 要素の入れ替えや追加を 正しく処理するために 欠かせません。
7. 状態管理とリスト操作の注意点
状態の配列は、 直接書き換えず、 新しい配列を 作って更新します。
これは、 Reactが変化を 正しく検知するために 必要な考え方です。
コピーして追加する、 という意識を持つと 安定した動作になります。
8. 初心者が最初に理解したいポイント
リスト表示は 配列を並べること、 状態管理は 画面の記憶だと 考えると分かりやすいです。
この二つを 組み合わせることで、 動きのある 画面を作れるようになります。