404ページ

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

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

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

アスタリスクのルート

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

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

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

受け皿には出口を置く

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

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

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

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

演習

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

ヒント

App.tsx
App.tsx
プレビュー

できているか

  • 古いお知らせのリンクを押すと、見つからないページが出る
  • 受け皿からトップへ戻れる
  • 商品一覧はこれまでどおり出る