コース一覧
React Routerとアプリ設計
404ページ

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分

404ページ

どこにも当たらなかった URL

どの Route にも当たらないとき

対応表に無い URL を開かれると、React Router はどれも選びません。画面には共通のナビだけが残り、中身が空っぽになります。エラーも出ないので、利用者からはアプリが壊れたようにしか見えません。

これは珍しいことではありません。古いお知らせのリンク、打ち間違えた URL、消した商品のブックマーク。どれも普通に起きます。だから受け皿を用意します。

アスタリスクのルート

path にアスタリスクを書くと、他のどれにも当たらなかったとき用の行になります。

TypeScript (JSX)

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

アスタリスクはどんな URL にも当たります。それでも /items を開いたときに NotFound が出ないのは、Routes が一番よく合う1つを選ぶからです。並べる順番で決まるわけではないので、読みやすい位置に置いて構いません。慣習として最後に書きます。

受け皿には出口を置く

404 のページで一番大事なのは、謝る文ではなく次にどこへ行けるかです。

TypeScript (JSX)

function NotFound() { return ( <div className="not-found"> <h1>ページが見つかりませんでした</h1> <p>URL が変わったか、商品が取り下げられたのかもしれません。</p> <Link className="to-home" to="/">トップへ戻る</Link> </div> ); }

行き止まりにしないことが要点です。ここでブラウザの戻るボタンしか出口が無いと、そのまま離脱されます。

なお、これはあくまで画面の話です。サーバーが返す 404 という応答とは別のもので、URL の見た目も変わりません。SPA では、無い場所を出すのもアプリの仕事になります。

演習

迷子の受け皿を作り、トップへの出口を付けます。

ヒント

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

アスタリスクの Route を足しても、/items を開いたときは商品一覧のほうが選ばれます

戻り先のリンクも Link で書きます。ここで a タグを使うと、アプリごと読み込み直しになります

App.tsx
プレビュー

できているか

  • 古いお知らせのリンクを押すと、見つからないページが出る
  • 受け皿からトップへ戻れる
  • 商品一覧はこれまでどおり出る
  • どれにも当たらないときの Route を書いている
エディタを読み込んでいます