つくる - 設計リファクタ

動くものを、動いたまま組み直す

新しいことは出てきません。この章の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 が残っていたら、まだ途中です。

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

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

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

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

演習

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

ヒント

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

できているか

  • 上の帯に fleama が出ている
  • 横の帯にカテゴリが3つ出ている
  • 真ん中にカードが3枚ある
  • 3枚とも価格が出ている
  • 帆布トートが出ている
  • 売り切れの札が出ている