コース一覧
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分

空状態

0 件のときの枝

0件の画面を忘れない

作品が3件あるうちは、map で並べるだけで一覧が成立します。ところが1件も無いとき、この一覧は「何も無い場所」になります。見出しの下がすっぽり空いていると、読む人には壊れているのか読み込み中なのか判断できません。

0件のときに出す画面を空状態と呼びます。プロが作った画面には必ず用意されています。

三項演算子で出し分ける

書き方は前のレッスンと同じです。一覧を出すか、空状態を出すかの2択なので三項演算子が合います。

JavaScript (JSX)

{works.length === 0 ? ( <p className="empty-message">まだ作品がありません</p> ) : ( works.map((work) => ( <div className="work-card" key={work.id}>{work.title}</div> )) )}

条件は works.length === 0 のように比較で書きます。works.length をそのまま && の左に置くと、0件のときに画面へ 0 という文字が出てしまう話は前のレッスンのとおりです。

早期 return で分ける手もある

一覧まわりを別のコンポーネントに切り出しているなら、先に返してしまうほうが読みやすくなります。

JavaScript (JSX)

function WorkList({ works }) { if (works.length === 0) { return <p className="empty-message">まだ作品がありません</p>; } return <div className="work-list">{works.map(...)}</div>; }

コンポーネントの本体は普通の関数なので、if も早期 return も自由に書けます。JSX の波かっこの中でだけ if が使えない、と覚えておいてください。

空状態に何を書くか

「データがありません」とだけ出す画面をよく見かけますが、これは半分しか仕事をしていません。空状態には、なぜ空なのかと、次に何をすればよいかを書きます。自分の作品一覧なら「まだ作品がありません。最初の作品を追加しましょう」のように、次の一歩まで書けると親切です。

絞り込みの結果が0件のときも同じです。「該当する作品がありません」と出したうえで、絞り込みを解除する手段を近くに置きます。この続きは次のレッスンで作ります。

演習

作品を削除できる一覧に、0件のときの表示を足します。

ヒント

{works.length === 0 ? (<p ...>...</p>) : (works.map(...))} の形で書けます

条件は works.length === 0 のように比較で書きます。works.length だけを && の左に置くと 0 が画面に出ます

App.jsx
プレビュー

できているか

  • はじめは work-card が3枚並んでいる
  • 一覧に作品名が表示されている
  • 3件すべて削除すると「まだ作品がありません」に変わる
エディタを読み込んでいます