LoginSignup
0
0

REACT Router

Last updated at Posted at 2024-06-28

React Router

React Router は、React アプリケーションにおいてクライアントサイドルーティングを管理するための強力なライブラリです。以下に、React Router の基本的な概念と使用方法の例を示します。

React Router のインストール

まず、Web アプリケーション用の React Router バージョンである react-router-dom をインストールします:

npm install react-router-dom

基本的な使い方

以下は、React アプリケーションで React Router を設定して使用する簡単な例です。

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

const Home = () => <h2>ホーム</h2>;
const About = () => <h2>アバウト</h2>;
const Dashboard = () => <h2>ダッシュボード</h2>;

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">ホーム</Link>
            </li>
            <li>
              <Link to="/about">アバウト</Link>
            </li>
            <li>
              <Link to="/dashboard">ダッシュボード</Link>
            </li>
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/dashboard" element={<Dashboard />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

動的ルーティング

React Router は、URL パラメータを使用して動的ルーティングをサポートしています。

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

const Home = () => <h2>ホーム</h2>;
const About = () => <h2>アバウト</h2>;

const User = () => {
  const { id } = useParams();
  return <h2>ユーザーID: {id}</h2>;
};

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

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/user/:id" element={<User />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

ルートリダイレクト

リダイレクトを行うために Navigate コンポーネントを使用できます。

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

const Home = () => <h2>ホーム</h2>;
const About = () => <h2>アバウト</h2>;
const Dashboard = () => <h2>ダッシュボード</h2>;

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">ホーム</Link>
            </li>
            <li>
              <Link to="/about">アバウト</Link>
            </li>
            <li>
              <Link to="/dashboard">ダッシュボード</Link>
            </li>
            <li>
              <Link to="/old-dashboard">旧ダッシュボード (リダイレクト)</Link>
            </li>
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/dashboard" element={<Dashboard />} />
          <Route path="/old-dashboard" element={<Navigate to="/dashboard" />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

ルートガードと保護されたルート

useNavigate フックを使用してルートガードや保護されたルートを実装できます。

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

const Home = () => <h2>ホーム</h2>;
const About = () => <h2>アバウト</h2>;

const Dashboard = () => {
  const navigate = useNavigate();
  const isAuthenticated = false; // 認証されていないと仮定

  if (!isAuthenticated) {
    navigate('/');
  }

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

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">ホーム</Link>
            </li>
            <li>
              <Link to="/about">アバウト</Link>
            </li>
            <li>
              <Link to="/dashboard">ダッシュボード</Link>
            </li>
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/dashboard" element={<Dashboard />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

ルート変更の監視

useNavigate と useEffect フックを使用してルート変更を監視できます。

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

const Home = () => <h2>ホーム</h2>;
const About = () => <h2>アバウト</h2>;

const Dashboard = () => <h2>ダッシュボード</h2>;

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

  useEffect(() => {
    const handleRouteChange = (url) => {
      console.log('ルートが変更されました:', url);
    };

    // ルート変更の監視
    navigate.listen(handleRouteChange);

    return () => {
      // 監視の解除
      navigate.remove(handleRouteChange);
    };
  }, [navigate]);

  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">ホーム</Link>
            </li>
            <li>
              <Link to="/about">アバウト</Link>
            </li>
            <li>
              <Link to="/dashboard">ダッシュボード</Link>
            </li>
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
          <Route path="/dashboard" element={<Dashboard />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0