コース一覧
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つを、fleama 全体に一度に当てます。

  • 表示担当とデータ担当に分ける
  • 枠は穴だけ持ち、中身は呼ぶ側で差し込む
  • 機能ごとにフォルダを分ける

いまの App.tsx は、通信も、状態も、枠も、並べ方も全部を1つの関数で抱えています。画面はこのあと1行も変わりません。変わるのは、次に手を入れる人が読む量だけです。

どこから切るか

順番があります。まずデータの流れを外へ出し、次に見た目を割り、最後にフォルダへ配ります。

プレーンテキスト

App.tsx 枠を組み立てるだけ components/Layout.tsx 穴が3つある枠 features/items/types.ts Item の型 features/items/ItemListContainer.tsx 取ってきて渡す features/items/ItemListView.tsx 並べるだけ

App が持つのは「どの枠に何を差すか」だけになります。App に fetch と useEffect が残っていたら、まだ途中です。

売り切れの札は表示担当の仕事

売り切れかどうかで見た目を変えるのは、判断ではなく描き分けです。

TypeScript (JSX)

{item.status === "sold" && <span className="sold">売り切れ</span>}

props で受け取ったものだけを見て描いているので、これは表示担当に置いて構いません。逆に「売れたら再取得する」のような話は、データ担当の仕事になります。

演習

App.tsx に固まっている fleama を、4つのファイルへ配り直します。

ヒント

先に App.tsx から fetch と useEffect を切り出すと、あとが楽になります

Layout に差し込む side には CategoryNav をそのまま渡します

ItemListView に useState や fetch が出てきたら、切る場所を間違えています

App.tsx
CategoryNav.tsx
Layout.tsx
ItemListContainer.tsx
ItemListView.tsx
types.ts
mock-api.json
プレビュー

できているか

  • 上の帯に fleama が出ている
  • 横の帯にカテゴリが3つ出ている
  • 真ん中にカードが3枚ある
  • 3枚とも価格が出ている
  • 帆布トートが出ている
  • 売り切れの札が出ている
  • App が枠を components から読んでいる
  • App がデータ担当を features から読んでいる
  • App から通信が消えている
  • App から effect が消えている
  • 枠が children を ReactNode で受けている
  • 枠に横の帯の穴がある
  • データ担当が通信を持っている
  • 表示担当に state が残っていない
  • 表示担当に通信が残っていない
  • 型が features/items に移っている
エディタを読み込んでいます