コース一覧
Reactで状態・フォーム・リストを扱う
つくる - ギャラリーReact版

Reactで状態・フォーム・リストを扱う

useState、イベントハンドラ、制御されたinput、フォーム送信とバリデーション、mapによるリスト表示、key、条件レンダリング、空状態を扱う全25レッスンのコースです。入力・絞り込み・ダークモードへ反応する作品ギャラリーを作り、ユーザー操作で変化するUIの基本を身につけます。

1
state(useState)
01. なぜstateが必要か15分
02. useState15分
03. ボタンで更新15分
04. 複数のstate15分
05. オブジェクトのstate15分
06. 配列のstate15分
07. 再レンダリングの仕組み10分
08. つくる - ダークモード切替20分
09. 第4章クイズ15分
2
イベントとフォーム
01. イベントハンドラ15分
02. イベントオブジェクト15分
03. 制御されたinput15分
04. 複数の入力15分
05. フォーム送信15分
06. バリデーション15分
07. つくる - 問い合わせフォーム20分
08. 第5章クイズ15分
3
リストと条件レンダリング
01. mapでリスト描画15分
02. key15分
03. 条件レンダリング(&&)15分
04. 出し分け(三項)15分
05. 空状態15分
06. 絞り込みUI15分
07. つくる - ギャラリーReact版20分
08. 第6章クイズ15分

つくる - ギャラリーReact版

章のまとめとして作るもの

この章で覚えたものを全部使って、作品ギャラリーを仕上げます。JavaScript 入門で作ったギャラリーは、DOM を組み立てて appendChild で足し、絞り込みのたびに中身を消して作り直していました。React 版では、持つのは元データと選ばれているカテゴリの2つだけで、画面はそこから毎回計算されます。

作るものは次の4つです。

  1. 作品配列を map で並べ、key を付ける
  2. 2026年の作品に NEW バッジを出す(&&)
  3. 公開中と非公開のラベルを出し分ける(三項演算子)
  4. カテゴリボタンで絞り込み、0件のときは空状態を出す(filter と state)

部品の分け方

1枚ぶんの見た目は WorkCard に切り出します。バッジとラベルはカード1枚の中の話なので、カードが自分で決めれば済みます。

JavaScript (JSX)

function WorkCard({ work }) { return ( <div className="work-card"> <h2>{work.title}</h2> {work.year >= 2026 && <span className="badge-new">NEW</span>} </div> ); }

一覧のほうは、どの作品を出すかだけを決めます。key を付けるのは map を書いた側、つまり App の役目です。WorkCard の中の div に key を書いても意味がありません。React が見るのは、配列として並べた要素に付いた key だけだからです。

JavaScript (JSX)

{shown.map((work) => ( <WorkCard work={work} key={work.id} /> ))}

0件になるカテゴリを用意しておく

絞り込みの空状態は、実際に0件になるカテゴリが無いと確かめられません。今回はボタンに「ゲーム」を入れてあります。作品データにゲームは1件も無いので、押すと必ず0件になります。ここで「該当する作品がありません」が出れば、空状態が効いている証拠です。

手が止まったら

いきなり全部を書こうとせず、map で3件出す、バッジを足す、ラベルを足す、絞り込みを足す、空状態を足す、の順に1つずつ動かして確かめてください。React の画面は state から計算されるので、途中の状態でも壊れずに動きます。

演習

絞り込み付きの作品ギャラリーを完成させます。

ヒント

バッジは && 、ラベルは三項演算子が向いています

key を付けるのは map を書いている App 側です。WorkCard の中に書いても効きません

絞り込み後の配列は state にせず、category と works から毎回計算します

App.jsx
WorkCard.jsx
プレビュー

できているか

  • はじめは work-card が3枚並んでいる
  • 2026年の作品に NEW バッジが出ている
  • 非公開の作品に label-private のラベルが出ている
  • ツールを押すと「買い物メモツール」1件だけになる
  • ゲームを押すと「該当する作品がありません」が出る
エディタを読み込んでいます