はじめに|Reactでリスト表示につまずいた話
Reactを初めて学んだとき、僕が混乱したのが「リストの表示」でした。
最初はエラーや警告に悩まされましたが、仕組みを理解すると一気にスッキリしました。
この記事では、Reactのリスト表示の基礎(map関数とkey属性) を、初心者向けに丁寧に解説していきます。
Reactでリスト表示をする基本の考え方

- Reactでは、配列のデータを
map
関数で要素に変換して描画します。 - HTMLのように「同じタグを手書きで並べる」必要はなく、配列を繰り返し処理してJSXを生成するのが基本です。
- その際、Reactは要素を正しく追跡するために
key
属性が必須になります。
この2つ(map
と key
)を押さえることが、Reactのリスト表示の第一歩です。
Reactでmap関数を使ったリスト表示の書き方
コード全文(App.js)
function App() {
const fruits = ["りんご", "みかん", "ぶどう"];
return (
<div>
<h1>フルーツ一覧</h1>
<ul>
{fruits.map((fruit) => (
<li>{fruit}</li>
))}
</ul>
</div>
);
}
export default App;
抜粋
{fruits.map((fruit) => (
<li>{fruit}</li>
))}
解説
fruits.map((fruit) => ( ... ))
→ 配列fruits
の中身を1つずつ取り出して<li>
に変換しています。- JSXでは
{ ... }
の中にJavaScriptの式を書けるため、mapの戻り値(配列)をそのまま要素として描画できます。 - 短い式なので
( ... )
で囲む書き方が多いですが、複数行になるときは必須です。 for文
では同じように直接要素を返せないため、Reactでは mapを使うのが定石です。
初心者がつまずくポイント
return
を書き忘れてundefined
を返してしまう- JSXを複数行に書くときに括弧で囲まず、構文エラーになる
Reactにおけるkey属性の役割と正しい使い方
コード全文(App.js)
function App() {
const fruits = ["りんご", "みかん", "ぶどう"];
return (
<div>
<h1>フルーツ一覧</h1>
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
</div>
);
}
export default App;
抜粋
<li key={index}>{fruit}</li>
解説
key
属性は、Reactがリストの要素を一意に識別するための目印です。- UIを再レンダリングするとき、Reactは「前回と同じ要素かどうか」をkeyで判断します。
- keyがなければReactは効率的な差分計算(Virtual DOM比較)ができず、警告を出します。
indexをkeyに使うのは原則NG

- 上の例では
index
を使っていますが、実務では非推奨です。 - 配列の並びが変わると
key
がずれてしまい、不要な再描画や状態のバグが起きます。 - 理想はユニークなIDを使うことです。
たとえば以下の例を考えてみましょう。
const fruits = ["りんご", "みかん", "ぶどう"];
この配列を index を key
にして表示すると:
<ul>
<li key={0}>りんご</li>
<li key={1}>みかん</li>
<li key={2}>ぶどう</li>
</ul>
ここで「先頭に新しい要素」を追加します。
const fruits = ["バナナ", "りんご", "みかん", "ぶどう"];
React側ではこう認識されます:
<li key={0}>バナナ</li>
<li key={1}>りんご</li>
<li key={2}>みかん</li>
<li key={3}>ぶどう</li>
一見正しそうに見えますが、Reactは「key=0
は前回の りんご
と同じ要素」と勘違いします。
結果として、UIは正しく更新されても、内部的には状態やアニメーションがズレることがあります。
Reactでオブジェクト配列をリスト表示する方法
コード全文(App.js)
function App() {
const users = [
{ id: 1, name: "太郎", age: 20 },
{ id: 2, name: "花子", age: 22 },
{ id: 3, name: "次郎", age: 18 },
];
return (
<div>
<h1>ユーザー一覧</h1>
<ul>
{users.map((user) => (
<li key={user.id}>
{user.name}({user.age}歳)
</li>
))}
</ul>
</div>
);
}
export default App;
抜粋
<li key={user.id}>
{user.name}({user.age}歳)
</li>
解説
- データベースから取得したデータのように、オブジェクト配列を扱う場面が多いです。
user.id
をkey
に指定すれば、ユーザーごとに一意の識別子となり安全。- 複数のプロパティ(
name
,age
)を{ ... }
で埋め込むことで柔軟に表示できます。 - この仕組みを理解すれば、ToDoリストや商品一覧など、実用的なUIが作れるようになります。
まとめ|Reactでmap関数とkey属性を正しく使いこなそう

- Reactでリストを表示する基本は map関数
- 要素を追跡するために key属性は必須
- indexではなく、ユニークIDをkeyに使うのがベストプラクティス
僕自身、最初は「警告がうるさいな」としか思っていませんでした。
でも、仕組みを理解してからは「Reactって無駄な再描画を避けるためにここまで考えられてるのか!」と感心しました。
リスト表示はアプリ開発で必ず使うので、早めにマスターしておきましょう!
HTMLなら
ul > li
を手書きすれば済むのに、Reactでは配列をどうやってJSXに変換するのか、そしてkey
属性をなぜ必ず書かないといけないのか……。