Reactアプリケーションでページ遷移を管理する際に使用されるのがReact Routerです。TypeScriptを組み合わせることで、ルートやナビゲーションに型安全性を持たせることができ、予期しないエラーを防ぐことができます。この章では、基本的なルーティング、動的なルーティングを個別に解説しながら、TypeScriptを用いた型付け方法を紹介します。
基本的なルーティング
基本的なルーティングでは、URLごとに異なるコンポーネントを表示します。React Routerを使うと、Routes
とRoute
コンポーネントを利用してルートの設定を行います。
基本例
以下は、Home
とAbout
の2つのページを持つアプリケーションの例です。
tsx
import React from 'react';
import {
BrowserRouter as Router,
Routes,
Route,
Link,
} from 'react-router-dom';
const Home = () => <h1>Home Page</h1>;
const About = () => <h1>About Page</h1>;
const App = () => {
return (
<Router>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
};
export default App;
解説
BrowserRouter
: URLの履歴を管理します。Routes
とRoute
: 各ルートと対応するコンポーネントを関連付けます。Link
: ページ遷移のためのリンクを作成します。
この例では、/
にアクセスするとHome
コンポーネントが、/about
にアクセスするとAbout
コンポーネントが表示されます。
動的なルーティング
動的なルーティングでは、URLの一部を変数として扱い、その値に基づいて表示内容を変更します。
動的ルートの例
以下は、製品IDを含む動的なルートの例です。
tsx
import React from 'react';
import { BrowserRouter as Router, Routes, Route, useParams } from 'react-router-dom';
interface ProductParams {
id: string;
}
const Product = () => {
const { id } = useParams<ProductParams>();
return <h1>Product ID: {id}</h1>;
};
const App = () => {
return (
<Router>
<Routes>
<Route path="/product/:id" element={<Product />} />
</Routes>
</Router>
);
};
export default App;
解説
useParams
: URLパラメータを取得するためのフック。ProductParams
: URLパラメータの型定義。
この例では、/product/123
にアクセスするとProduct ID: 123
が表示されます。
型安全なルート定義
アプリケーションが成長するにつれて、ルートパスの管理が複雑になることがあります。ルートパスを中央で管理し、型で保証することで保守性を向上させることができます。
ルート定義の例
tsx
interface Routes {
HOME: '/';
ABOUT: '/about';
PRODUCT: '/product/:id';
}
const ROUTES: Routes = {
HOME: '/',
ABOUT: '/about',
PRODUCT: '/product/:id',
};
const App = () => {
return (
<Router>
<Routes>
<Route path={ROUTES.HOME} element={<Home />} />
<Route path={ROUTES.ABOUT} element={<About />} />
<Route path={ROUTES.PRODUCT} element={<Product />} />
</Routes>
</Router>
);
};
解説
Routes
インターフェース: アプリ全体のルートを型で定義。ROUTES
定数: ルートパスを中央で管理。
このアプローチにより、ルートの変更が容易になります。
ナビゲーションの型付け
動的にページ遷移を行う際にも、型を使って安全性を確保することができます。
例: useNavigateを使用したナビゲーション
tsx
import { useNavigate } from 'react-router-dom';
const Home = () => {
const navigate = useNavigate();
const goToProduct = (id: string) => {
navigate(`/product/${id}`);
};
return (
<div>
<button onClick={() => goToProduct('123')}>Go to Product 123</button>
</div>
);
};
解説
useNavigate
: プログラム的にページ遷移を行うためのフック。goToProduct
関数: 型付きの動的ルートを生成。
この例では、id
が文字列であることを保証することで、安全なナビゲーションを実現しています。
React RouterをTypeScriptと組み合わせることで、基本的なルーティングから動的なルーティングまで、型安全性を持たせた堅牢なコードを記述できます。型安全なルート定義やナビゲーションを活用することで、保守性と開発効率が向上します。