React Routerは、Reactアプリケーションにおけるルーティングを管理するためのライブラリです。ReactのSPA(Single Page Application)において、ユーザーが異なるURLにアクセスしてもページをリロードせずにビューを切り替えることができる非常に強力なツールです。この記事では、React Routerの基本的な使い方から、応用的な機能まで、完全かつ包括的に解説します。
React Routerとは?
React Routerは、Reactアプリケーション内でページ遷移を管理するためのライブラリです。Reactは元々単一のビューを描画するため、画面遷移の概念は組み込まれていません。そこで、React Routerを使用することにより、URLに基づいたページ遷移を実現し、ユーザーがURLを変更することで異なるコンポーネントを表示できるようになります。

React Routerのインストール
まず、React Routerを使うためには、react-router-dom
パッケージをインストールする必要があります。これは、ReactのDOM環境においてルーティング機能を提供します。以下のコマンドでインストールできます。
bashnpm install react-router-dom
または、Yarnを使っている場合は次のコマンドでインストールできます。
bashyarn add react-router-dom
基本的な使用法
React Routerを使うための最も基本的な設定は、BrowserRouter
、Route
、Link
コンポーネントを使うことです。
1. BrowserRouter
の設定
BrowserRouter
は、React Routerのルーティングを使用するためのラッパーコンポーネントです。これをアプリケーションのトップレベルに配置します。
jsximport React from 'react';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
function Root() {
return (
<BrowserRouter>
<App />
BrowserRouter>
);
}
export default Root;
BrowserRouter
がアプリケーション全体を囲むことで、その中でルーティングを利用することができます。
2. Route
コンポーネント
Route
コンポーネントは、特定のURLパスにマッチしたときに表示するコンポーネントを定義します。例えば、/home
というパスにアクセスした場合にHome
コンポーネントを表示するには次のようにします。
jsximport React from 'react';
import { Route } from 'react-router-dom';
import Home from './Home';
function App() {
return (
<div>
<Route path="/home" component={Home} />
div>
);
}
export default App;
上記の例では、ユーザーが/home
にアクセスすると、Home
コンポーネントが表示されます。
3. Link
コンポーネント
React Routerでは、タグの代わりに
Link
コンポーネントを使用します。これにより、ページをリロードせずにビューを切り替えることができます。
jsximport React from 'react';
import { Link } from 'react-router-dom';
function Navigation() {
return (
<nav>
<Link to="/home">HomeLink>
<Link to="/about">AboutLink>
nav>
);
}
export default Navigation;
このNavigation
コンポーネントを使うことで、/home
や/about
に遷移するリンクを提供できます。
ルーティングの高度な機能
React Routerには、さらに高度なルーティング機能も備わっています。次に、それらの一部を紹介します。
1. URLパラメータ
React Routerでは、URL内で動的なパラメータを渡すことができます。たとえば、/profile/:username
のようなURLパスを設定して、ユーザー名をURLから取得することができます。
jsximport React from 'react';
import { Route, useParams } from 'react-router-dom';
function Profile() {
const { username } = useParams();
return <h1>Welcome, {username}!h1>;
}
function App() {
return (
<div>
<Route path="/profile/:username" component={Profile} />
div>
);
}
export default App;
この場合、/profile/john
というURLにアクセスすると、Profile
コンポーネントが表示され、john
というユーザー名が表示されます。
2. Switch
コンポーネント
Switch
コンポーネントは、複数のRoute
を使う際に、最初に一致したパスにマッチするルートのみをレンダリングするために使います。これにより、URLに一致する最初のルートのみが表示され、後続のルートは無視されます。
jsximport React from 'react';
import { Route, Switch } from 'react-router-dom';
function App() {
return (
<div>
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component={About} />
<Route component={NotFound} />
Switch>
div>
);
}
export default App;
このようにすることで、/home
や/about
にマッチする場合のみそのコンポーネントが表示され、それ以外の場合はNotFound
コンポーネントが表示されます。
3. リダイレクト
React Routerでは、特定のURLにアクセスした際に、別のURLにリダイレクトすることも可能です。これにはRedirect
コンポーネントを使用します。
jsximport React from 'react';
import { Redirect, Route } from 'react-router-dom';
function App() {
return (
<div>
<Route path="/old-home" render={() => <Redirect to="/home" />} />
div>
);
}
export default App;
この例では、/old-home
にアクセスすると、自動的に/home
にリダイレクトされます。
4. useHistory
とuseLocation
useHistory
とuseLocation
はReact Routerのフックで、プログラム的にページ遷移を行いたい場合に使います。
useHistory
は、ブラウザの履歴を操作するために使用します。useLocation
は、現在のURLやクエリパラメータなどの情報を取得するために使用します。
jsximport React from 'react';
import { useHistory } from 'react-router-dom';
function GoHomeButton() {
const history = useHistory();
const handleClick = () => {
history.push('/home');
};
return <button onClick={handleClick}>Go to Homebutton>;
}
export default GoHomeButton;
GoHomeButton
コンポーネントを使うと、ボタンをクリックした際に/home
に遷移することができます。
結論
React Routerは、Reactアプリケーションにおけるルーティングを非常に簡単かつ強力に管理できるライブラリです。基本的な使い方から高度な機能まで幅広くサポートしており、SPA(Single Page Application)の開発において非常に有用です。React Routerを使いこなすことで、より直感的でスムーズなユーザー体験を提供することができます。