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

つくる - ページ分割完了

第7章のまとめとして組む

新しいことは出てきません。ここまでの5つを組み合わせて、fleama を複数ページのアプリにします。

  • BrowserRouter で包む
  • Routes と Route で URL と画面を対応させる
  • Link と useNavigate で移る
  • useParams で商品詳細を1本の Route にする
  • アスタリスクの Route で迷子を受ける

5つの画面を1枚の表にする

fleama の画面はこうなります。

TypeScript (JSX)

<Routes> <Route path="/" element={<Home />} /> <Route path="/items" element={<ItemList items={items} />} /> <Route path="/items/:id" element={<ItemDetail items={items} />} /> <Route path="/new" element={<NewItem />} /> <Route path="/mypage" element={<MyPage items={items} />} /> <Route path="*" element={<NotFound />} /> </Routes>

アプリ全体がこの6行で見渡せます。画面の一覧表がコードとして1か所にあるというのが、ルーティングを入れて得られる一番大きなものです。

データはどこで取るか

商品の取得は App で1回だけ行い、必要な画面に props で渡します。各ページがそれぞれ取りに行くと、ページを移るたびに読み込み直しになります。

TypeScript (JSX)

const [items, setItems] = useState<Item[]>([]); useEffect(() => { fetch("/api/items") .then((res) => res.json()) .then((data: Item[]) => setItems(data)); }, []);

App は BrowserRouter の外側にいるので、ページが変わっても作り直されません。だから取得は1回で済みます。第8章では、この形をもっと整理していきます。

演習

対応表を書き上げて、fleama の5つの画面を通します。

ヒント

items を渡すのは element の中です。element={<ItemList items={items} />} の形になります

ItemDetail の中は const { id } = useParams(); と items.find((i) => i.id === id) の2行から始まります

商品は通信で届くので、最初の一瞬は0件です。並ぶまで少し待ってから確かめてください

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

できているか

  • 最初に出るのはトップの画面
  • 商品一覧に、取得した4件が並ぶ
  • 2件目の革靴を押すと、革靴の詳細が出る
  • マイページに取引済みの2件が出る
  • 出品ページに移れる
  • 詳細を useParams で出している
  • 迷子の受け皿を用意している
エディタを読み込んでいます