Reactでエラー画面に遷移させる方法
Reactでエラー画面に遷移させる方法を紹介します。
以下の例では、エラーページのルーティングをreact-router-domを使って実装します。
まず、react-router-domとその型定義をインストールします。
npm install react-router-dom npm install @types/react-router-dom
yarn add react-router-dom yarn add @types/react-router-dom
1. エラーページのコンポーネントを作成する
※このやり方はエラーページのコンポーネントを使い回す(メッセージ以外、デザインが一緒)場合の方法です。
src/pages/ErrorPage.tsx
import React from 'react'; interface ErrorPageProps { statusCode: number; } const ErrorPage: React.FC<ErrorPageProps> = ({ statusCode }) => { let message = ''; switch (statusCode) { case 401: message = '認証エラー: このページにアクセスする権限がありません。'; break; case 403: message = '禁止エラー: このページへのアクセスは許可されていません。'; break; case 404: message = 'ページが見つかりません。'; break; case 500: message = 'サーバーエラーが発生しました。'; break; case 503: message = 'サービスが利用できません。'; break; default: message = 'エラーが発生しました。'; break; } return ( <div> <h1>エラー {statusCode}</h1> <p>{message}</p> </div> ); }; export default ErrorPage;
2. ルーティングを設定する
src/App.tsx
import React from 'react'; import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom'; import ErrorPage from './pages/ErrorPage'; const App: React.FC = () => { return ( <Router> <Switch> {/* その他のルート */} {/* エラーページのルート */} <Route path="/error/:statusCode" render={({ match }) => { const statusCode = Number(match.params.statusCode); return <ErrorPage statusCode={statusCode} />; }} /> {/* 404ページ 上記のいずれにも当てはまらない場合 */} <Route path="*"> <Redirect to="/error/404" /> </Route> </Switch> </Router> ); }; export default App;
3. エラーページにリダイレクトする
例えば、サーバーからのエラー応答を受け取ったときにエラーページにリダイレクトするには、以下のようにします。
import React, { useEffect } from 'react'; import { useHistory } from 'react-router-dom'; const FetchDataComponent: React.FC = () => { const history = useHistory(); useEffect(() => { // データ取得処理(例) fetch('/api/data') .then(response => { if (!response.ok) { // ステータスコードに基づいてエラーページにリダイレクト history.push(/error/${response.status}); } return response.json(); }) .catch(() => { history.push('/error/500'); }); }, [history]); return <div>データ取得中...</div>; }; export default FetchDataComponent;
この方法で、特定のエラーコードに応じたエラーページに遷移できます。