空状態

0件の画面を忘れない

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

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

三項演算子で出し分ける

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

{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 で分ける手もある

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

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件のときの表示を足します。

ヒント

App.jsx
App.jsx
プレビュー

できているか

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