第8回
propsとmap:自己紹介カードをたくさん並べよう
外から情報を渡すpropsと、配列から要素を並べるmapを小学生向けに解説。名まえカードを使い回して、自己紹介カードやミニ図鑑をたくさん並べる方法を作りながら学びます。
制作・運営:React Guide 運営者
props = 外からわたす情報
前回のカードは、名前が「山田たける」で固定でした。でも、名前や趣味を外からわたせるようにすると、1つの部品でいろんな人のカードが作れます。
この「外からわたす情報」を props(プロップス) といいます。カードに書きこむメモのようなものです。
function NameCard({ name, hobby }) {
return (
<div className="card">
<h2>{name}</h2>
<p>趣味:{hobby}</p>
</div>
)
}{ name, hobby } の部分が「受け取る情報」です。使うときは、こう書きます。
export default function App() {
return (
<div>
<NameCard name="山田たける" hobby="サッカー" />
<NameCard name="田中はるか" hobby="ダンス" />
<NameCard name="鈴木ゆな" hobby="読書" />
</div>
)
}name="..." や hobby="..." で、それぞれのカードにちがう情報をわたしています。画面にはこう出ます。
山田たける
趣味:サッカー
田中はるか
趣味:ダンス
鈴木ゆな
趣味:読書
1つの NameCard から、中身のちがう3枚のカードができました。これがpropsの便利さです。
map = データからならべる
まず、みんなの情報を**リスト(配列)**にまとめます。
const friends = [
{ id: 'takeru', name: '山田たける', hobby: 'サッカー' },
{ id: 'haruka', name: '田中はるか', hobby: 'ダンス' },
{ id: 'yuna', name: '鈴木ゆな', hobby: '読書' },
]そして map を使うと、このリストから自動でカードをならべられます。
export default function App() {
return (
<div>
{friends.map((f) => (
<NameCard key={f.id} name={f.name} hobby={f.hobby} />
))}
</div>
)
}friends.map(...) は「リストの1つずつについて、カードを作ってね」という意味です。key={f.id} は「ならべるときの目印」です。同じ名前の人がいても、idは重ならないようにします。Appの例は2つを同時に貼らず、後の例で前のAppを置き換えます。NameCardとfriendsは同じファイルに置きます。
これで、friends にデータを足すだけで、カードが自動でふえます。
山田たける
趣味:サッカー
田中はるか
趣味:ダンス
鈴木ゆな
趣味:読書
佐藤けんと
趣味:ゲーム
データに「佐藤けんと」を1人足したら、カードも1枚ふえました。これが「自己紹介カード集(ミニ図鑑)」です!
やってみよう
friends のリストに、自分と友だちを足してみましょう。hobby を food(好きな食べ物)に変えたり、項目をふやしたりしてもおもしろいです。好きな動物やキャラクターの「ミニ図鑑」も作れますよ。
まとめ
- props … コンポーネントに外から情報をわたすしくみ(
name="..."のように書く) - 1つの部品でも、propsを変えれば中身のちがうカードが何枚でも作れる
- map … データのリストから、自動で部品をならべる技
key… ならべるときの目印(つけるお約束)- データを足すだけでカードがふえる → これがミニ図鑑・自己紹介カード集
次の第9回では、ボタンをおすと画面が変わるしくみ(stateとイベント)を学びます。いよいよ「動く」アプリに近づきます。
確認してみる
同じ名前で違うidのカードを2枚作る。項目をfoodへ変える場合は、データ・渡すprops・受け取る側の3箇所をそろえる。
同じテーマの教材
4択クイズを作ろう(正解と点数を出そう)
選択肢を押すと正解・不正解がわかり点数がたまる4択クイズを作る回。配列とmapで選択肢を並べ、stateで点数を管理する方法を小学生向けにやさしく解説します。
リストレンダリングとkey:配列データからUIを生成する
Reactでの配列のmap()によるリストレンダリングを解説。keyプロパティが必要な理由と、よくある間違いをFeatureCard実装を通じて学ぶ。
propsでデータを渡す:FeatureCardコンポーネントを作る
Reactのpropsの仕組みをTypeScriptの型定義と合わせて解説。コピペから脱してデータを外から受け取るコンポーネントの作り方を学ぶ。