[React #05] React Routerを使ったページ遷移

1. はじめに

  • なぜページ遷移が必要か
    多画面・多機能アプリでは、ユーザーが異なるコンテンツや機能にアクセスする必要があります。これを実現するために、ページ遷移が不可欠です。特に、ユーザーがシームレスに情報にアクセスし、直感的に操作できることは、良いユーザー体験に直結します。

  • React Routerを使うメリット
    Reactでは、コンポーネントベースでの開発が行われるため、ページ遷移を管理するには適切なルーティング機能が必要です。ここで登場するのが React Router です。React Routerを使うことで以下のようなメリットがあります:

    • URLベースの管理
        React Routerでは、アプリケーション内での画面遷移をURLを使って管理します。これにより、ユーザーがブラウザの戻るボタンを使って前のページに戻れるなど、ウェブアプリケーションとしての基本的な機能を提供できます。

    • ブラウザ履歴対応
        React Routerはブラウザの履歴を管理します。これにより、ユーザーがブラウザの「戻る」や「進む」ボタンを使った場合でも、アプリケーションが正しく動作し、画面遷移の履歴を保持します。

    • リンク遷移
        React Routerを使うことで、ユーザーがアプリケーション内をナビゲートする際に、ページ全体をリロードせずに、コンテンツだけを動的に更新できます。これにより、アプリケーションのパフォーマンスが向上し、よりスムーズな遷移が可能になります。

    • ダイナミックルート
        React Routerでは、URLに基づいた動的なページ遷移が可能です。例えば、ユーザーIDや記事IDなどをURLパラメータとして使用し、それに応じたコンテンツを表示することができます。これにより、より柔軟でダイナミックなアプリケーションの構築が可能になります。

2. React Routerのインストールとセットアップ

React Routerを使うためには、まずプロジェクトにインストールする必要があります。以下の手順で、React Routerをセットアップしましょう。

2.1. React Routerのインストール

React Routerはnpmを使用して簡単にインストールできます。以下のコマンドを実行して、React Routerをインストールします。

npm install react-router-dom

これで、React Routerがプロジェクトに追加されました。react-router-dom は、Reactでのルーティングに必要なライブラリで、ブラウザ向けに特化しています。

2.2. 必要なコンポーネントのインポート

React Routerを使うためには、いくつかのコンポーネントをインポートする必要があります。主に使用するのは以下の3つです:

  • BrowserRouter: ルーティング機能を有効にするコンテナコンポーネント。
  • Route: 特定のURLに基づいて表示するコンポーネントを定義する。
  • Link: 異なるルート間でリンクを作成するためのコンポーネント。

これらをApp.jsファイルにインポートします。

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

2.3. React Routerを使った基本的な構成

まずは、簡単なReact Routerの設定を行います。以下のコードは、2つのページに遷移できるシンプルなアプリケーションを作成するものです。

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

// コンポーネントの定義
const Home = () => {
  return <h2>ホームページ</h2>;
};

const About = () => {
  return <h2>アバウトページ</h2>;
};

// Appコンポーネント
function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">ホーム</Link>
            </li>
            <li>
              <Link to="/about">アバウト</Link>
            </li>
          </ul>
        </nav>

        {/* ページのルート定義 */}
        <Route path="/" exact component={Home} />
        <Route path="/about" component={About} />
      </div>
    </Router>
  );
}

export default App;

2.4. コードの解説

  • BrowserRouter:
      ルートコンポーネントをRouterでラップすることで、Reactアプリ全体にルーティング機能を提供します。

  • Link:
      ユーザーがクリックできるリンクを作成し、他のページに遷移できるようにします。to属性で遷移先のURLを指定します。

  • Route:
      特定のURLに対して、表示するコンポーネントを設定します。path属性でURLパターンを指定し、component属性で表示するコンポーネントを指定します。

    • exact 属性:
        ルートが完全一致する場合のみそのコンポーネントを表示するオプションです。これを指定しないと、すべてのURLが / にマッチしてしまいます。

3. パラメータ付きのURL(ダイナミックルート)

React Routerでは、URLにパラメータを渡して、動的にコンテンツを表示することができます。例えば、ユーザーIDや記事IDをURLに埋め込むことで、特定のデータを取得し、そのデータに基づいたページを表示できます。

3.1 ダイナミックルートの設定

URLのパラメータを使って、動的なページを作成するには、React Routerの動的ルート(ダイナミックルート)を使用します。Route コンポーネントでパラメータを指定するためには、path 属性にコロン(:)を使ってプレースホルダを作成します。

import React from 'react';
import { BrowserRouter as Router, Route, Link, useParams } from 'react-router-dom';

// ユーザープロフィールを表示するコンポーネント
function UserProfile() {
  // useParams フックで URL パラメータを取得
  const { userId } = useParams();
  return <h2>ユーザーID: {userId}</h2>;
}

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">ホーム</Link>
            </li>
            <li>
              <Link to="/user/123">ユーザー123</Link>
            </li>
            <li>
              <Link to="/user/456">ユーザー456</Link>
            </li>
          </ul>
        </nav>

        {/* ダイナミックルート */}
        <Route path="/" exact render={() => <h2>ホームページ</h2>} />
        <Route path="/user/:userId" component={UserProfile} />
      </div>
    </Router>
  );
}

export default App;

3.2 useParams フックを使ってパラメータを取得

  • useParams フックを使うと、URLパラメータを簡単に取得できます。このフックは、現在のURLに含まれるパラメータをオブジェクトとして返します。
  • 上記の例では、/user/:userId というルートを定義しており、userId をパラメータとして渡しています。
const { userId } = useParams();

これで、例えば /user/123 にアクセスすると、userId123 として取得され、コンポーネント内でその値を使って動的に表示を行います。

3.3 ダイナミックルートを使ったデータの取得

ダイナミックルートを使って、APIからデータを取得し、そのデータを表示する場合もあります。例えば、ユーザーIDに基づいてそのユーザーの詳細情報をAPIから取得する例です。

import React, { useState, useEffect } from 'react';
import { BrowserRouter as Router, Route, Link, useParams } from 'react-router-dom';

function UserProfile() {
  const { userId } = useParams();
  const [userData, setUserData] = useState(null);

  // ユーザー情報を取得
  useEffect(() => {
    fetch(`https://jsonplaceholder.typicode.com/users/${userId}`)
      .then(response => response.json())
      .then(data => setUserData(data));
  }, [userId]);

  if (!userData) {
    return <h2>ユーザー情報を読み込み中...</h2>;
  }

  return (
    <div>
      <h2>{userData.name}のプロフィール</h2>
      <p>メール: {userData.email}</p>
      <p>住所: {userData.address.street}, {userData.address.city}</p>
    </div>
  );
}

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">ホーム</Link>
            </li>
            <li>
              <Link to="/user/1">ユーザー1</Link>
            </li>
            <li>
              <Link to="/user/2">ユーザー2</Link>
            </li>
          </ul>
        </nav>

        {/* ダイナミックルート */}
        <Route path="/" exact render={() => <h2>ホームページ</h2>} />
        <Route path="/user/:userId" component={UserProfile} />
      </div>
    </Router>
  );
}

export default App;

3.4 まとめ

  • React Routerのダイナミックルート を使うことで、URLに基づいて異なるデータやコンテンツを表示することができます。
  • useParams フックを使うことで、URLのパラメータを簡単に取得でき、データの取得や表示に活用できます。
  • APIからデータを取得して動的に表示を更新する場合も、React Routerの組み合わせでスムーズに実現できます。

4. SPAとしてのReactの特徴

Reactを使用したアプリケーションは、基本的に SPA(シングルページアプリケーション) として設計されています。

SPAは、ブラウザの1ページ内で複数のビュー(画面)を切り替えながら動作するアプリケーションです。これにより、ページ全体を再読み込みすることなく、スムーズで高速なユーザー体験を提供できます。

4.1 SPAの特徴

4.1.1 ページ全体の再読み込みが不要

SPAでは、ユーザーが異なるページに遷移しても、ブラウザはページ全体をリロードすることなく必要なコンテンツだけを読み込みます。これにより、ページ遷移が高速になり、従来のマルチページアプリケーション(MPA)に比べてユーザーの待機時間を短縮できます。

  • ページ遷移時にデータやコンテンツだけを差し替え、DOMの更新を効率よく行います。
  • 例: ユーザーが「ホームページ」から「プロフィールページ」に遷移しても、HTML全体の再読み込みは行わず、必要な部分だけを動的に更新します。

4.1.2 高速なユーザー体験

SPAは、サーバーから一度だけ必要なリソースを読み込んで、後はそのリソース内でページを遷移します。これにより、ネットワーク通信が最小限に抑えられ、ページ遷移が非常に高速になります。

  • 初期読み込み時には、HTML、CSS、JavaScript、画像などのリソースが一度だけ読み込まれます。
  • その後、アプリケーションはその状態を保持し、データだけを更新することで、アプリ全体のパフォーマンスが向上します。

4.1.3 URLの管理

SPAはReact Routerなどのライブラリを使ってURLを管理しますが、ページ遷移がURLの更新を伴うため、ブラウザの「戻る」や「進む」ボタンが正常に機能します。

  • 例えば、ユーザーが/profileにアクセスしたとき、/homeから/profileに遷移しますが、アプリケーションは実際にリロードを行うことなく、その状態を管理します。
  • これにより、ブラウザの履歴機能を利用できるだけでなく、アプリケーションの状態をURLに反映させることもできます。

4.2 SPAのメリット

4.2.1 スムーズなユーザー体験

SPAの最大の特徴は、そのスムーズで途切れのないユーザー体験です。ページの遷移時に待機時間がほとんどなく、アプリケーションの操作が直感的に行えます。ユーザーが感じる「読み込み中」の時間が短く、すぐに次のアクションを取ることができるため、UXが向上します。

4.2.2 アプリケーションの状態管理

SPAでは、全てのページ遷移がJavaScriptで管理されるため、アプリケーションの状態管理が非常に柔軟になります。Reactの状態管理ライブラリ(Context API、Reduxなど)を使って、アプリ全体の状態を一元管理することができます。

  • ユーザーが異なるページ間で遷移しても、アプリケーションの状態(例えば、ログイン情報やショッピングカートの内容)を保持することができます。

4.2.3 パフォーマンスの向上

SPAでは、最初の読み込みが少し遅くなることがありますが、その後のページ遷移は非常に速くなります。これは、ページ全体を再読み込みする必要がなく、必要な部分だけを更新するためです。

  • データの取得やページの更新が速いため、ユーザーが操作をした際に待機時間が少なく、快適に使用することができます。

4.3 SPAのデメリット

4.3.1 初回ロードが遅い

SPAは初回ロード時に全てのリソースを一度に読み込む必要があるため、初回の表示が少し遅くなることがあります。ただし、これはコード分割(Reactの React.lazySuspense)を使うことで改善できます。

  • 必要なページやコンポーネントだけを遅延読み込み(Lazy loading)することで、初期読み込み時間を短縮できます。

4.3.2 SEOの問題

SPAでは、すべてのコンテンツがJavaScriptによってクライアントサイドで生成されるため、SEO(検索エンジン最適化)に課題があります。検索エンジンのクローラーはJavaScriptを実行しない場合があるため、SPAで動的に生成されるコンテンツを適切にインデックスできないことがあります。

  • この問題を解決するためには、**サーバサイドレンダリング(SSR)**を利用することが一般的です。SSRを使うことで、サーバ側でコンテンツを生成し、検索エンジンがインデックス可能な形でHTMLを提供することができます。

4.3.3 ルート切り替え時の遷移感の欠如

ページ遷移時に完全なリロードがないため、ユーザーがページ遷移しても遷移感が薄く感じることがあります。このため、遷移時のアニメーションを工夫してユーザーに自然な遷移体験を提供することが重要です。

  • react-transition-groupframer-motion などのライブラリを使って、ページ遷移時にアニメーションを加えることで、よりスムーズな遷移体験が得られます。

4.4 まとめ

  • SPAは、ページのリロードなしでコンテンツが更新されるため、非常にスムーズなユーザー体験を提供します。
  • React Routerを使うことで、SPA内でのページ遷移を簡単に管理できます。
  • 初回の読み込み時間やSEOなどのデメリットに対しては、SSRやコード分割、遅延読み込みなどの技術を使うことで解決可能です。

ReactのSPAの仕組みを理解して、パフォーマンス向上やユーザー体験の最適化を目指していきましょう。

5. 実践:簡単なマルチページ機能を導入

このセクションでは、React Routerを使って、簡単なマルチページ機能を実装します。具体的には、以下のページを作成します:

  • ホームページ
     アプリケーションのトップページ

  • ユーザー詳細ページ
     ユーザーIDを基に情報を表示するページ

  • カートページ
     ユーザーが選んだ商品をカートに追加し、表示するページ

これらをReact Routerを使用して、SPA内でページ遷移する方法を解説します。

5.1. プロジェクトのセットアップ

まず、Reactのプロジェクトを作成して、React Routerをインストールします。

npx create-react-app my-app
cd my-app
npm install react-router-dom

インストールが完了したら、以下のファイル構成で実装を進めます:

  • src/

    • App.js
    • Home.js
    • User.js
    • Cart.js

5.2. ルーティングの設定

まず、App.js ファイルでReact Routerを使って、ルート設定を行います。

import React from 'react';
import { BrowserRouter as Router, Route, Routes, Link } from 'react-router-dom';
import Home from './Home';
import User from './User';
import Cart from './Cart';

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li><Link to="/">ホーム</Link></li>
            <li><Link to="/user/1">ユーザー1</Link></li>
            <li><Link to="/user/2">ユーザー2</Link></li>
            <li><Link to="/cart">カート</Link></li>
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/user/:userId" element={<User />} />
          <Route path="/cart" element={<Cart />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;
  • <Router>: ルーティングの土台。アプリ全体を包みます。
  • <Link>: 他のページへの遷移リンクを作成します。
  • <Routes>: ルートを定義します。React Router v6では、<Route><Routes> 内に配置します。

5.3. ページコンポーネントの作成

次に、それぞれのページコンポーネントを作成します。

Home.js

import React from 'react';

function Home() {
  return <h2>ホームページへようこそ</h2>;
}

export default Home;

User.js(ダイナミックルート)

ユーザーIDを取得して、そのユーザーに関連する情報を表示します。

import React from 'react';
import { useParams } from 'react-router-dom';

function User() {
  const { userId } = useParams();

  return <h2>ユーザーID: {userId} の詳細情報</h2>;
}

export default User;
  • useParams(): このフックを使うことで、URLパラメータを取得できます。例えば、/user/:userId のようなルートでは、:userId の部分を useParams() で取得できます。

Cart.js

カートページでは、仮のアイテムをリスト表示します。

import React, { useState } from 'react';

function Cart() {
  const [items] = useState([
    { id: 1, name: 'アイテム1', price: 1000 },
    { id: 2, name: 'アイテム2', price: 2000 },
  ]);

  return (
    <div>
      <h2>カート</h2>
      <ul>
        {items.map(item => (
          <li key={item.id}>
            {item.name} - ¥{item.price}
          </li>
        ))}
      </ul>
    </div>
  );
}

export default Cart;

5.4. 動作確認

アプリケーションを実行して、各リンクをクリックすると、ページ遷移が行われることを確認します。

npm start

ブラウザで次のURLにアクセスして、動作を確認できます。

5.5. まとめ

  • React Router を使うことで、Reactアプリケーション内でのページ遷移が簡単に実装できます。
  • ダイナミックルートを使うことで、URLパラメータを取得して、動的にデータを表示することができます。
  • SPA(シングルページアプリケーション)の特徴を活かして、アプリケーションのパフォーマンスやユーザー体験を向上させることができます。

6. React Routerでのリダイレクトと遷移管理

React Routerは、ユーザーがアプリ内で特定の条件を満たさない場合に、他のページにリダイレクトする機能を提供します。このセクションでは、リダイレクトの設定方法、プログラム的な遷移の方法、そして条件付きルート(ユーザーが認証されていない場合にリダイレクトするなど)について学びます。

6.1. リダイレクトの設定

React Routerでは、<Navigate> コンポーネントを使ってページをリダイレクトすることができます。これにより、ユーザーが指定されたページに自動的に遷移することができます。

6.1.1 単純なリダイレクト

例えば、/home から /about にリダイレクトする場合は、次のように書きます。

import React from 'react';
import { Navigate } from 'react-router-dom';

function Home() {
  return <Navigate to="/about" />;
}

export default Home;

上記の例では、Home コンポーネントが表示された後、ユーザーは自動的に /about に遷移します。

6.1.2 条件付きリダイレクト

場合によっては、特定の条件を満たすときのみリダイレクトさせたいことがあります。例えば、ユーザーがログインしていない場合にログインページへリダイレクトするような場合です。

import React, { useState } from 'react';
import { Navigate } from 'react-router-dom';

function Dashboard() {
  const [isAuthenticated, setIsAuthenticated] = useState(false);

  if (!isAuthenticated) {
    return <Navigate to="/login" />;
  }

  return <h2>ダッシュボード</h2>;
}

export default Dashboard;
  • isAuthenticatedfalse の場合、ユーザーは /login にリダイレクトされます。
  • 逆に、isAuthenticatedtrue の場合は、ダッシュボードが表示されます。

6.2. プログラム的な遷移

React Routerでは、useNavigate フックを使ってプログラム的にページ遷移を制御することもできます。これにより、イベントが発生したとき(例えば、ボタンクリックやフォーム送信)に遷移を行うことができます。

6.2.1 useNavigate フックを使った遷移

import React from 'react';
import { useNavigate } from 'react-router-dom';

function Home() {
  const navigate = useNavigate();

  const handleClick = () => {
    navigate('/about'); // '/about' に遷移
  };

  return (
    <div>
      <button onClick={handleClick}>Aboutページに遷移</button>
    </div>
  );
}

export default Home;
  • useNavigate フックは遷移先のパスを引数に取ることで、プログラム的にページ遷移を実行します。
  • 上記の例では、ボタンがクリックされると /about に遷移します。

6.2.2 遷移のオプション

useNavigate では、オプションを追加して遷移の挙動をカスタマイズすることもできます。例えば、replace オプションを使って、現在の履歴エントリを置き換えることができます。これにより、ユーザーが「戻る」ボタンを押したときに、リダイレクト前のページに戻らないようにできます。

navigate('/about', { replace: true });

6.3. 条件付きルート(認証付きページ)

SPAでは、特定のページにアクセスする前に、ユーザーが認証されているかどうかを確認するケースがよくあります。React Routerを使って、認証状態に基づいてページへのアクセスを制限する方法を紹介します。

6.3.1 認証のチェック

次のコードでは、認証されていないユーザーがダッシュボードにアクセスしようとしたときに、ログインページにリダイレクトするように設定します。

import React, { useState } from 'react';
import { Navigate } from 'react-router-dom';

function ProtectedRoute({ children }) {
  const [isAuthenticated, setIsAuthenticated] = useState(false);

  if (!isAuthenticated) {
    return <Navigate to="/login" />;
  }

  return children;
}

export default ProtectedRoute;
  • ProtectedRoute コンポーネントは、ユーザーが認証されていない場合に自動的にログインページにリダイレクトします。
  • children に渡されたコンテンツ(例えばダッシュボード)を条件付きで表示します。

6.3.2 ProtectedRoute を使ったルート設定

import React from 'react';
import { Route, BrowserRouter as Router, Routes } from 'react-router-dom';
import ProtectedRoute from './ProtectedRoute';
import Dashboard from './Dashboard';
import Login from './Login';

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/login" element={<Login />} />
        <Route
          path="/dashboard"
          element={
            <ProtectedRoute>
              <Dashboard />
            </ProtectedRoute>
          }
        />
      </Routes>
    </Router>
  );
}

export default App;
  • /dashboard ページにアクセスする際、認証されていないユーザーはログインページにリダイレクトされます。

6.4. まとめ

  • <Navigate> コンポーネントを使って、条件付きでリダイレクトを設定できます。
  • useNavigate フックを使って、プログラム的に遷移を実行できます。
  • 認証が必要なページへのアクセスは、条件付きルートを使って管理することができます。

React Routerを使った遷移管理は、SPAの特性を最大限に活用できる強力な方法です。次は、コード分割遅延読み込みについて解説し、さらにアプリケーションを最適化していきましょう。

7. コード分割と遅延読み込み

Reactでは、アプリケーションが大規模になると、初期ロードが遅くなり、ユーザー体験に影響を与えることがあります。これを改善するために、コード分割遅延読み込みの技術を活用します。これにより、最初に必要な部分だけを読み込み、ユーザーが実際に使用するページやコンポーネントを遅延読み込みすることで、パフォーマンスを向上させることができます。

7.1. コード分割の基本

Reactでは、React.lazySuspense を使うことで、動的にコンポーネントを遅延読み込みすることができます。これにより、最初に読み込むJavaScriptの量を減らし、ページの読み込み速度を向上させることができます。

7.1.1 React.lazy と Suspense を使った遅延読み込み

import React, { Suspense } from 'react';

// 動的インポート
const About = React.lazy(() => import('./About'));

function App() {
  return (
    <div>
      <h1>React アプリケーション</h1>

      {/* Suspenseでラップしてローディング表示 */}
      <Suspense fallback={<div>Loading...</div>}>
        <About />
      </Suspense>
    </div>
  );
}

export default App;
  • React.lazy は、指定されたコンポーネントを遅延読み込みするための関数です。import() を使って動的にコンポーネントをインポートします。
  • Suspense は、遅延読み込み中に表示するフォールバックUI(例えば「Loading…」など)を提供します。

これにより、About コンポーネントは必要になるまで読み込まれません。初期読み込み時は、About コンポーネントを含むコードは読み込まれないため、アプリケーションの初期ロードが高速になります。

7.2. 複数のコンポーネントを遅延読み込み

複数のページやコンポーネントを遅延読み込みする場合も、同じように React.lazySuspense を使います。例えば、React Routerと組み合わせて、ページ遷移時にコンポーネントを遅延読み込みすることができます。

7.2.1 React Routerと組み合わせた遅延読み込み

import React, { Suspense } from 'react';
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';

// コンポーネントの遅延読み込み
const Home = React.lazy(() => import('./Home'));
const About = React.lazy(() => import('./About'));

function App() {
  return (
    <Router>
      <Suspense fallback={<div>Loading...</div>}>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
        </Routes>
      </Suspense>
    </Router>
  );
}

export default App;
  • Suspense でアプリケーション全体をラップして、fallback にローディングUIを表示します。
  • ページコンポーネント(HomeAbout)が遅延読み込みされ、必要になったタイミングでのみロードされます。

7.3. 動的インポートとコード分割

Reactの遅延読み込みは、単にコンポーネントを動的にインポートするだけでなく、コード分割も同時に実現します。動的インポートを使うと、アプリケーションが依存するJavaScriptファイルが小さく分割され、必要なときにだけ読み込まれます。

例えば、About コンポーネントが500KBの大きさだとしても、最初はそのコードは読み込まれません。ユーザーがそのページに遷移する際に、そのコンポーネントだけが動的に読み込まれます。

7.4. コードスプリッティングと React.lazy の活用例

7.4.1 条件付きでコード分割を使う

場合によっては、特定の条件(例えば、ユーザーがログインしているかどうか)に応じてコンポーネントを遅延読み込みしたいことがあります。この場合も、React.lazy を使うことで動的にコンポーネントを読み込むことができます。

const UserProfile = React.lazy(() => {
  return isAuthenticated ? import('./UserProfile') : Promise.resolve();
});

function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      {isAuthenticated ? <UserProfile /> : <Login />}
    </Suspense>
  );
}
  • Promise.resolve() を使って、条件に応じてインポートをスキップすることができます。

7.5. まとめ

  • コード分割を使うことで、アプリケーションのパフォーマンスを向上させ、初期ロードを高速化することができます。
  • React.lazySuspense を活用して、動的にコンポーネントを読み込むことができ、これにより必要なときだけコードを遅延読み込みできます。
  • React Router と組み合わせることで、ページ遷移時にもコンポーネントを遅延読み込みし、ページのパフォーマンスを最適化できます。

まとめ

このガイドでは、React Routerを使ってReactアプリケーション内でのページ遷移を実現する方法を学びました。

以下のポイントをカバーしました:

  1. React Routerの基本的な使い方

    • BrowserRouter, Route, Link コンポーネントを使って、ページ間の遷移を管理。
    • exact 属性を使って完全一致のルーティングを設定。
  2. パラメータ付きURL(ダイナミックルート)

    • URLのパラメータを使って動的にコンテンツを表示。useParamsフックを使ってパラメータを取得し、異なるデータを表示できる。
  3. SPAとしてのReactの特徴

    • ReactアプリはSPA(シングルページアプリケーション)として動作し、ページ遷移時に全ページをリロードせず、効率的なUIを提供。
  4. リダイレクトと遷移管理

    • Navigateコンポーネントや useNavigateフックを使って、ページ遷移をプログラム的に管理。
    • 認証されていないユーザーを特定のページにリダイレクトする条件付きルート。
  5. 実践:マルチページ機能の導入

    • ルーティング設定で複数のページ(ホーム、ユーザー詳細、カートなど)を実装し、React Routerの基本を実践。
  6. コード分割と遅延読み込み

    • React.lazySuspense を使用して、動的にコンポーネントを遅延読み込みし、アプリのパフォーマンスを向上。

最終的に、React Routerを活用することで、複雑なSPAの中でスムーズなページ遷移とデータ管理が可能になり、アプリケーションのユーザー体験を大きく向上させることができました。

これからのステップとして、さらに高度なルーティング機能(カスタムフックの活用やサーバサイドレンダリング)にも挑戦できます。

関連リンク