コース一覧
React道場 ハレノヒ珈琲をモダン化する10問
MenuCard部品を作れ

React道場 ハレノヒ珈琲をモダン化する10問

React の基本を終えた人が、白紙から部品を組み立てる演習専用コースです。解説はありません。依頼と完成条件だけを読み、自分で設計します。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。props を受ける部品から始まり、state、条件付きのクラス、map での描画、絞り込み、制御コンポーネント、入力の検証を経て、最後は部品の分割と注文ウィジェットの完成まで、10問で React の主要な考え方を一巡します。1問15分から45分、全10問で約5時間です。React入門を終えて「写経はできるが白紙からは書けない」と感じている方に向いています。

1
初段
01. MenuCard部品を作れ15分
02. いいねボタン15分
03. ダークモード切替(React版)20分
04. メニュー一覧をmapで描画せよ20分
2
中段
01. カテゴリタブで絞り込め25分
02. 予約フォームを制御せよ25分
03. 入力エラーを表示せよ30分
04. 営業中バッジと時計30分
3
師範
01. 肥大部品を分割せよ35分
02. 総合 注文ウィジェット完成45分

MenuCard部品を作れ

初段 / 目安 15分

陽葵さんがスマホをこちらに向けてきます。「他のお店のサイト、なんかこう……サクサクなの!うちも React ってやつにしたい!」。JS 道場で仕上げたハレノヒ珈琲のサイトを、部品の世界へ作り直す全面リニューアルの始まりです。

開幕から陽葵さんは鋭いところを突いてきました。「メニューカード、あなた8回コピペして書いてたでしょ。“部品”って概念があるって聞いたよ、私」。そのとおりです。同じ形のカードが8枚あるなら、書くのは1枚ぶんで足ります。

この一問でやるのは、MenuCard という関数を1つ作ることだけです。React では 関数がそのまま部品 になります。大文字で始まる名前を付けて JSX を返す関数を書けば、<MenuCard /> と書いて呼び出せるようになります。

カードごとに違うのは、商品名・値段・説明の3つです。この「外から渡す値」を props と呼びます。MenuCard は引数として props のオブジェクトを受け取るので、{ name, price, desc } の形で分割代入して取り出してください。中身を JSX に出すときは波かっこで包んで {name} のように書きます。値段は {price}円 のように、波かっこの外に文字を続けて書けます。

完成条件

  • MenuCard という関数を作り、props として name price desc を受け取る
  • カード1枚は className="card" の要素で、中に h3 の商品名、className="price" の値段、p の説明を持つ
  • App から MenuCard を props を変えて3枚以上並べる

進め方

部品の関数は App と同じファイルの中に、App の外側で書きます。export default を付けるのは App だけで、MenuCard は同じファイルの中から呼ぶので何も付けなくて構いません。

呼び出すときは HTML のタグと同じ書き方で、属性のように props を渡します。文字はそのままクォートで、数はクォートではなく波かっこで渡すのが React の作法です。

画面が真っ白なときは、部品の名前を小文字で始めていないか確かめてください。小文字で始まる名前は HTML のタグ扱いになり、React はそんなタグを知らないので何も出ません。

ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 カード1枚ぶんの見た目を MenuCard という関数に切り出します。カードごとに違うのは商品名・値段・説明の3つだけなので、その3つを外から渡してもらう形にすれば、App 側は MenuCard を並べるだけになります。

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
App.jsx
styles.css
プレビュー

できているか

  • カードが3枚以上並んでいる
  • どのカードにも h3 の商品名が入っている
  • 2枚目のカードに値段と「円」が出ている
  • 3枚目のカードに説明文が出ている
エディタを読み込んでいます