React Router: No Not Found Route ?

2024-04-10

React-Routerで404ページを表示する

このライブラリを使うと、URLと画面表示を対応させることができ、ユーザーがブラウザのURLを変更したときに、それに応じて表示される画面を切り替えることができます。

しかし、ユーザーが誤ったURLを入力したり、存在しないページにアクセスしようとした場合、何も表示されない状態になる可能性があります。

そこで、404ページ を表示することで、ユーザーが現在アクセスしているページが存在しないことを伝えることができます。

404ページを表示する方法

React-Routerで404ページを表示するには、以下の方法があります。

  1. Switch コンポーネントを使う

Switch コンポーネントは、複数の Route コンポーネントをまとめて管理するためのコンポーネントです。

Route コンポーネントは、URLと画面表示を対応させるためのコンポーネントです。

Switch コンポーネントの中で、すべての Route コンポーネントにマッチしなかった場合に、404ページを表示するコンポーネントを最後に記述します。

import { Switch, Route } from 'react-router-dom';

const App = () => {
  return (
    <Switch>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Route component={NotFound} />
    </Switch>
  );
};

const NotFound = () => {
  return (
    <div>
      <h1>404ページ</h1>
      <p>お探しのページは見つかりませんでした。</p>
    </div>
  );
};

上記のコードでは、NotFound コンポーネントが404ページとして表示されます。

Redirect コンポーネントは、ユーザーを別のURLにリダイレクトするためのコンポーネントです。

すべての Route コンポーネントにマッチしなかった場合に、Redirect コンポーネントを使って404ページにリダイレクトすることができます。

import { Switch, Route, Redirect } from 'react-router-dom';

const App = () => {
  return (
    <Switch>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Redirect to="/404" />
    </Switch>
  );
};

const NotFound = () => {
  return (
    <div>
      <h1>404ページ</h1>
      <p>お探しのページは見つかりませんでした。</p>
    </div>
  );
};

上記のコードでは、すべての Route コンポーネントにマッチしなかった場合、/404 URLにリダイレクトされます。

React-Routerで404ページを表示するには、Switch コンポーネントまたは Redirect コンポーネントを使うことができます。

404ページは、ユーザーにとって分かりやすく、親切なページであることが重要です。

404ページには、以下のような情報を記載すると良いでしょう。

  • 404エラーが発生したことを伝えるメッセージ
  • お探しのページが存在しない理由
  • ホームページへのリンク
  • サイトマップへのリンク

404ページをうまく活用することで、ユーザーの利便性を向上させることができます。




import React from 'react';
import { Switch, Route, Redirect } from 'react-router-dom';

const App = () => {
  return (
    <Switch>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Redirect to="/404" />
    </Switch>
  );
};

const Home = () => {
  return (
    <div>
      <h1>ホーム</h1>
      <p>これはホーム画面です。</p>
    </div>
  );
};

const About = () => {
  return (
    <div>
      <h1>会社概要</h1>
      <p>これは会社概要ページです。</p>
    </div>
  );
};

const NotFound = () => {
  return (
    <div>
      <h1>404ページ</h1>
      <p>お探しのページは見つかりませんでした。</p>
      <a href="/">ホームへ戻る</a>
    </div>
  );
};

export default App;

NotFound コンポーネントでは、404エラーが発生したことを伝えるメッセージと、ホームページへのリンクを表示しています。

import React from 'react';
import { Switch, Route } from 'react-router-dom';

const App = () => {
  return (
    <Switch>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Route component={NotFound} />
    </Switch>
  );
};

const Home = () => {
  return (
    <div>
      <h1>ホーム</h1>
      <p>これはホーム画面です。</p>
    </div>
  );
};

const About = () => {
  return (
    <div>
      <h1>会社概要</h1>
      <p>これは会社概要ページです.</p>
    </div>
  );
};

const NotFound = () => {
  return (
    <div>
      <h1>404ページ</h1>
      <p>お探しのページは見つかりませんでした.</p>
      <a href="/">ホームへ戻る</a>
    </div>
  );
};

export default App;

上記のコードは、サンプルコード1と同様に、React-Routerを使って404ページを表示するサンプルコードです。

上記のサンプルコードを参考に、React-Routerで404ページを表示してみてください。




React-Routerで404ページを表示する他の方法

NotFound コンポーネントをデフォルトのルートとして設定する

import React from 'react';
import { BrowserRouter, Route } from 'react-router-dom';

const App = () => {
  return (
    <BrowserRouter>
      <Route component={NotFound} />
    </BrowserRouter>
  );
};

const NotFound = () => {
  return (
    <div>
      <h1>404ページ</h1>
      <p>お探しのページは見つかりませんでした.</p>
      <a href="/">ホームへ戻る</a>
    </div>
  );
};

export default App;

この方法を使うと、すべての URL にマッチしなかった場合に、NotFound コンポーネントが表示されます。

ErrorBoundary コンポーネントを使う

import React from 'react';
import { ErrorBoundary } from 'react-error-boundary';

const App = () => {
  return (
    <ErrorBoundary>
      <MyComponent />
    </ErrorBoundary>
  );
};

const MyComponent = () => {
  // エラーが発生するコード
};

export default App;

上記のコードでは、ErrorBoundary コンポーネントを使って、コンポーネント内でエラーが発生した場合に、404ページを表示することができます。

ErrorBoundary コンポーネントは、react-error-boundary ライブラリから提供されています。

上記のいずれの方法でも、React-Routerで404ページを表示することができます。

どの方法を使うかは、プロジェクトの要件や開発者の好みによって異なります。


javascript reactjs react-router


jQuery .on() が動的に生成された要素で動作しない?解決策を徹底解説

jQuery で $(document).on('change', '#myInput', function() {...}) のように記述しても、動的に生成された入力要素 (#myInput) で change イベントがトリガーされないことがあります。...


React Native vs ReactJS:モバイルアプリ開発の選択肢 (2023年最新版)

ReactJS:Webアプリケーション開発向けのJavaScriptライブラリReact Native:モバイルアプリ開発向けのJavaScriptフレームワークメリット学習曲線が比較的緩やか軽量で高速な動作豊富なライブラリとコミュニティSEO対策に有利...


Nodemonがファイルシステムを監視できない?「[nodemon] Internal watch failed: watch ENOSPC」エラーの解決策

原因ファイルシステムの制限: 使用しているファイルシステムに十分な空き容量がない場合、nodemonはファイルを監視できなくなります。ファイルシステムのアクセス権: nodemonが監視するファイルやディレクトリに対するアクセス権を持っていない場合、エラーが発生します。...


React アプリ開発の悩みを解決!React Router v4 での「Cannot GET url」エラーの全貌

React Router v4 で "Cannot GET url" エラーが発生する場合は、通常、クライアント側ルーティングとサーバー側ルーティングの不整合が原因です。このエラーは、ブラウザが URL をリロードまたは直接入力した場合に発生する可能性があります。...


React Navigation v3で発生する「Invariant Violation: The navigation prop is missing for this navigator」エラーを解決する方法

このエラーは、React Navigation v3において、ナビゲーションコンポーネントに navigation propが渡されていない場合に発生します。navigation propは、画面遷移やその他のナビゲーション操作を実行するために必要な重要なプロパティです。...