コース一覧
React Routerとアプリ設計
仕上げ

React Routerとアプリ設計

React Router、Routes・Route・Link、URLパラメータ、検索条件、404、見た目と機能の分離、合成、機能別フォルダを扱う全18レッスンのアプリ設計コースです。fleamaを商品一覧・詳細・出品・カート・マイページを持つ複数ページSPAとして完成させます。

1
ルーティング(React Router v7)
01. ルーティング導入15分
02. RoutesとRoute15分
03. 遷移を作る15分
04. URLパラメータ15分
05. 検索条件をURLに15分
06. 404ページ15分
07. つくる - ページ分割完了20分
08. 第7章クイズ15分
2
コンポーネント設計パターン
01. 見た目と機能の分離15分
02. 合成で組み立てる15分
03. 機能別フォルダ10分
04. つくる - 設計リファクタ20分
05. 第8章クイズ15分
3
総合制作
01. 購入フロー20分
02. マイページ20分
03. 仕上げ15分
04. 自由拡張20分
05. 完成と次のステップ10分

仕上げ

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

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

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

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

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

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

TypeScript (JSX)

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

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

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

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

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

TypeScript (JSX)

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

空にも次の一手を付ける

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

演習

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

ヒント

取り直しは reloadKey を1増やします。依存配列に入っているので effect がもう一度動きます

0件かどうかは load.status が success のときだけ見ます。読み込み中の空配列と混ぜないためです

res.ok が false のときに throw すると、catch でまとめて受けられます

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

できているか

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