コース一覧
React Routerとアプリ設計
RoutesとRoute

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分

RoutesとRoute

URL がどの Route に当たるか

対応表を増やす

前のレッスンで書いた Routes は、URL と部品の対応表です。ページを増やすというのは、この表に行を足すことに他なりません。

TypeScript (JSX)

<Routes> <Route path="/" element={<Home />} /> <Route path="/items" element={<ItemList />} /> </Routes>

これで / ではトップが、/items では商品一覧が出ます。fleama の画面は5つありますが、増やし方は最後まで同じです。

Routes は1つだけ選ぶ

Routes は、中に並んだ Route のうちいまの URL に一番よく合うものを1つだけ選んで出します。上から順に全部出すわけではありません。だから /items を開いたときにトップが一緒に出ることはありません。

逆に、Routes の外に書いたものはどの URL でも出ます。全ページ共通のナビゲーションやフッターは Routes の外に置きます。

TypeScript (JSX)

<BrowserRouter> <nav className="nav">...</nav> <Routes> <Route path="/" element={<Home />} /> </Routes> </BrowserRouter>

どこに置くかで、共通部分か切り替わる部分かが決まるわけです。ここを取り違えると、ページを移るたびにナビが消えるアプリになります。

element には JSX を渡す

element に渡すのは <ItemList /> という書かれた JSX です。ItemList と関数のまま渡すと何も出ません。React Router の以前の版では component に関数を渡す書き方でしたが、v7 は element に統一されています。

なお今回のナビゲーションには Link を使っています。移動の書き方そのものは次のレッスンで扱うので、今回は書いてあるものをそのまま使ってください。

演習

商品一覧のページを対応表に足し、商品を並べます。

ヒント

<Route path="/items" element={<ItemList />} /> を Routes の中に足します

map の中の li には key が要ります。key には item.id を使います

ナビは Routes の外にあるので、どちらのページでも出たままになります

App.tsx
プレビュー

できているか

  • 最初に出るのはトップの画面
  • 商品一覧のリンクを押すと一覧に移り、商品が3件並ぶ
  • トップのリンクを押すとトップに戻る
  • パス /items の Route を書いている
エディタを読み込んでいます