Roa run dev

React Routerでルーティングを実装しよう!【基本】

●目次

    Reactでは、ページ遷移をしているように見せる「シングルページアプリケーション(SPA)」が主流です。
    その中で、「URLに応じて画面(コンポーネント)を切り替える」ためのライブラリが React Router です。

    この記事では、React Router v6 を使った基本的なルーティングの実装手順を、初心者にもわかりやすく丁寧に解説します。

    【1】ページコンポーネントの作成

    pagesフォルダを作成して、その中にHome.jsxとAbout.jsxファイルを作成します。

    ページごとにコンポーネントを作成し、それぞれがRouteで表示されるようにします。

    pages/Home.jsx
    import React from 'react';
    
    function Home() {
      return <h1>ホームページへようこそ!</h1>;
    }
    
    export default Home;
    pages/About.jsx
    import React from 'react';
    
    function About() {
      return <h1>このサイトについて</h1>;
    }
    
    export default About;
    pages/NotFound.jsx
    import React from 'react';
    
    function NotFound() {
      return <h1>404 - ページが見つかりません</h1>;
    }
    
    export default NotFound;
    ディレクトリ構成
    src/
    ├── App.jsx
    ├── main.jsx
    ├── pages/
    │   ├── Home.jsx
    │   ├── About.jsx
    │   └── NotFound.jsx

    【2】react-router-domのインストール

    ルーティング機能をReactで使うために、react-router-domというライブラリをインストールします。

    このライブラリがあると、URLによって異なるページを簡単に切り替えられます。

    ターミナル
    npm install react-router-dom

    react-router-dom はブラウザ版のReact Routerです。

    【3】セットアップ・ルーティング定義

    【3-1】セットアップ(main.jsx)

    Reactアプリの「最上位のコンポーネント」を、<BrowserRouter> で囲む必要があります。

    main.jsx
    import { StrictMode } from 'react'
    import { createRoot } from 'react-dom/client'
    
    // react-router
    import { BrowserRouter } from 'react-router-dom'
    
    import './index.css'
    import App from './App.jsx'
    
    createRoot(document.getElementById('root')).render(
      <StrictMode>
        <BrowserRouter>
          <App />
        </BrowserRouter>
      </StrictMode>
    )

    【3-2】ルーティング定義(App.jsx)

    <Routes> の中に <Route> を定義することで、URLごとの表示を切り替えます。
    path="*" は、「定義されていないすべてのパス」にマッチし、404表示に使います。

    App.jsx
    import React from 'react'
    
    // react-router (追加)
    import { Routes, Route } from 'react-router-dom';
    
    // pages (追加)
    import Home from './pages/Home'
    import About from './pages/About'
    import NotFound from './pages/NotFound'
    
    const App = () => {
      return (
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/about" element={<About />} />
            <Route path="*" element={<NotFound />} />
          </Routes>
      )
    }
    
    export default App

    【4】ナビゲーションを作成

    【4-1】レイアウトコンポーネントを作成(Header.jsx)

    layoutsフォルダを作成して、その中にHeader.jsxファイルを作成し、
    React RouterのLinkを使用したナビゲーションを実装します。

    layouts/Header.jsx
    // react-router (追加)
    import { Link } from 'react-router-dom';
    
    function Header() {
      return (
        <nav>
          <Link to="/">Home</Link>
          <Link to="/about">About</Link>
        </nav>
      );
    }

    【4-2】HeaderコンポーネントをApp.jsxに組み込む

    App.jsx
    import React from 'react'
    
    // react-router 
    import { Routes, Route } from 'react-router-dom';
    
    // pages 
    import Home from './pages/Home'
    import About from './pages/About'
    
    // layouts (追加)
    import Header from './layouts/Header';
    
    function App() {
      return (
        <Router>
          <Header />  {/* 追加 */}
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/about" element={<About />} />
          </Routes>
        </Router>
      );
    }
    
    export default App;
    
    ディレクトリ構成
    my-app/
    ├── src/
    │   ├── App.jsx
    │   ├── main.jsx
    │   ├── layouts/
    │   │   └── Header.jsx
    │   ├── pages/
    │   │   ├── Home.jsx
    │   │   ├── About.jsx
    │   │   └── NotFound.jsx

    まとめ

    React Router を使えば、React アプリ内でページ遷移のような動作をスムーズに実現できます。

    シンプルなポートフォリオサイトから本格的なWebアプリケーションまで、React Routerを使えばルート設計が簡単になります。 ぜひ一歩ずつ構築してみましょう!