Reactアプリケーションで複数のページを切り替えるには、React Routerというライブラリを使用します。SPAであるReactでは、ページ遷移時にブラウザのリロードが発生せず、高速な画面切り替えが実現できます。ここでは、React Routerを使ったルーティングの基本的な実装方法を解説します。
基本的な使い方
AppRoutes.jsx
import React from 'react';
import { Routes, Route } from 'react-router-dom';
// ページコンポーネントのインポート
import Home from './pages/Home';
import About from './pages/About';
import Products from './pages/Products';
import ProductDetail from './pages/ProductDetail';
import Contact from './pages/Contact';
import NotFound from './pages/NotFound';
const AppRoutes = () => {
return (
<Routes>
{/* メインページ */}
<Route path='/' element={<Home />} />
<Route path='/about' element={<About />} />
<Route path='/products' element={<Products />} />
<Route path='/products/:id' element={<ProductDetail />} />
<Route path='/contact' element={<Contact />} />
{/* 404ページ */}
<Route path='*' element={<NotFound />} />
</Routes>
);
};
export default AppRoutes;
説明
Step 1React Routerとは
React Routerは、Reactアプリケーションでルーティング(ページ遷移)を実現するためのライブラリです。シングルページアプリケーション(SPA)で複数のページを扱う際に使用します。
まず、React Routerをインストールする必要があります:
npm install react-router-dom
基本的なコンポーネント:
Routes: ルートの集まりを定義Route: 個々のルートとそのコンポーネントを定義Navigate: プログラムによるリダイレクトに使用
Step 2基本的なセットアップ
アプリケーションでReact Routerを使用するには、まず必要なコンポーネントをインポートし、アプリをBrowserRouterでラップします:
// index.js または App.js import { BrowserRouter } from 'react-router-dom'; // Appコンポーネント全体をBrowserRouterでラップ ReactDOM.render( <BrowserRouter> <App /> </BrowserRouter>, document.getElementById('root') );
Step 3ルートの定義
次に、Appコンポーネント内でルートを定義します:
// App.js import { Routes, Route, Navigate } from 'react-router-dom'; import Home from './pages/Home'; import About from './pages/About'; import Contact from './pages/Contact'; import NotFound from './pages/NotFound'; function App() { return ( <div className="App"> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="/contact" element={<Contact />} /> <Route path="/404" element={<NotFound />} /> <Route path="*" element={<Navigate to="/404" />} /> </Routes> </div> ); }
このコードでは:
path="/": ルートURL(トップページ)を表しますelement={<Home />}: 表示するコンポーネントを指定path="*": どのパスにも一致しない場合のフォールバック<Navigate to="/404" />: 404ページにリダイレクト
Step 4ナビゲーションリンクの作成
ページ間の遷移には、通常のaタグではなくLinkコンポーネントを使用します:
import { Link } from 'react-router-dom'; function Navbar() { return ( <nav> <ul> <li><Link to="/">ホーム</Link></li> <li><Link to="/about">会社情報</Link></li> <li><Link to="/contact">お問い合わせ</Link></li> </ul> </nav> ); }
Linkコンポーネントはページの再読み込みを防ぎ、SPAの動作を維持します。
Step 5URLパラメータの使用
動的なルートパラメータを使用するには、パスにパラメータを指定し、useParamsフックで取得します:
// App.js - ルートの定義 <Route path="/products/:id" element={<ProductDetail />} /> // ProductDetail.js - パラメータの取得 import { useParams } from 'react-router-dom'; function ProductDetail() { const { id } = useParams(); return ( <div> <h1>商品詳細</h1> <p>商品ID: {id}</p> {/* 取得したIDを使って商品情報を表示 */} </div> ); }
ポイント
重要: React Router v6以降では、従来のSwitch要素がRoutesに変更されています。また、exactプロパティは不要になり、より厳密なパスマッチングがデフォルトとなっています。
以前のバージョンからアップグレードする場合は、公式ドキュメントで変更点を確認してください。
まとめ
- React Routerは
npm install react-router-domでインストールする <BrowserRouter>でアプリ全体をラップし、<Routes>と<Route>でパスとコンポーネントを対応付ける<Link>コンポーネントでページ遷移のリンクを作成する(aタグの代わり)useNavigateフックでプログラム的にページ遷移ができる- 動的ルーティングでは
:idのようなパラメータを使い、useParamsで取得する - ネストされたルーティングで階層的なページ構成を実現できる