コース一覧
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分

マイページ

マイページに出すもの

マイページは、そのアプリで自分が何をしたかをまとめる画面です。fleama では2つ出します。

  • 出品した商品 — 自分が売りに出したもの
  • 購入した商品 — 自分が買ったもの

どちらも中身は商品の一覧です。違うのはどれを選ぶかだけなので、並べる部品は1つで足ります。第8章で作った ItemList をそのまま2回使います。

誰の画面かは Context から取る

「自分」が誰なのかは、第5章で作った UserContext が持っています。マイページは画面の奥のほうにありますが、props で渡さなくても直接読めます。

TypeScript (JSX)

const user = useContext(UserContext);

ここを props で受け取る形にすると、ヘッダーもマイページもカートも、全部の親がユーザーを渡す係になります。ログイン情報のようにアプリのどこでも要るものは Context に置くのが素直です。

絞り込みは filter で

商品には sellerId と buyerId を持たせてあります。出品した商品は売り手が自分のもの、購入した商品は買い手が自分のものです。

TypeScript (JSX)

const selling = items.filter((item) => item.sellerId === user.id); const bought = items.filter((item) => item.buyerId === user.id);

filter は元の配列を変えず、条件に合ったものだけの新しい配列を返します。同じ items から2つの一覧を作っても、互いに影響しません。ここで for を回して自分で配列を作ることもできますが、行が増えるだけで得はありません。

件数を添える

0件のときに何も出ないと、絞り込みが効いているのか壊れているのか分かりません。件数を出しておくと、その区別が付きます。

演習

UserContext から自分を取り出し、出品した商品と購入した商品に分けて並べます。

ヒント

const user = useContext(UserContext); を MyPage の中の先頭で呼びます

絞り込みは items.filter((item) => item.sellerId === user.id) の形です

件数は絞り込んだあとの配列の length です。items.length ではありません

App.tsx
プレビュー

できているか

  • 見出しにログイン中の名前が出ている
  • 出品した商品が並んでいる
  • 購入した商品が並んでいる
  • 出品した商品が 2 件になっている
  • 購入した商品が 2 件になっている
  • 出品した商品に Tシャツ が入っている
  • 購入した商品に マグカップ が入っている
  • Context からユーザーを取っている
  • any で逃げていない
エディタを読み込んでいます