仕上げ

仕上げにやるのは、うまくいかない道の手当て

機能はもう全部あります。最後に揃えるのは、うまくいかなかったときの画面です。第3章で作った3つの状態を、ここで通しで確かめます。

  • 読み込み中 — まだ返事が来ていない
  • エラー — 通信が失敗した
  • 空 — 成功したが0件だった

このうち「空」は忘れられがちです。通信は成功しているので、コードは何も文句を言いません。それでも画面には何も出ないので、利用者からは壊れているように見えます。

読み込み中は形を先に見せる

読み込み中の文字だけを出すと、返事が来た瞬間に画面がガタッと動きます。スケルトンという、これから出るものと同じ形の空の箱を並べておくと、動きが小さくなります。

{load.status === "loading" && ( <div className="skeleton-list"> <div className="skeleton" /> <div className="skeleton" /> <div className="skeleton" /> </div> )}

エラーには次の一手を付ける

「失敗しました」だけで終わると、利用者にできることが何もありません。もう一度試すボタンを添えます。

今回の mock-api.jsonfailFirst が付いていて、最初の1回だけ必ず失敗します。つまり再試行を書かないと、商品はいつまでも出てきません。実際のサービスでも、たまたま1回落ちるという事故はいちばん多い形です。

再読み込みは、依存配列に入れた数を増やすだけで起こせます。

const [reloadKey, setReloadKey] = useState(0);

空にも次の一手を付ける

0件のときは「出品がありません」と伝えます。ここも、絞り込みを戻す導線があると親切です。バッグで絞ると0件になるので、そこで確かめられます。

演習

読み込み中とエラーと空の3つを作り、再試行を押すと一覧が出るようにします。

ヒント

App.tsx
mock-api.json
App.tsx
mock-api.json
プレビュー

できているか

  • 読み込み中にスケルトンが3つ出る
  • 失敗したときにエラーの表示が出る
  • 再試行のボタンがある
  • 再試行を押すと商品が3件出る
  • 0件のカテゴリで空の表示が出る