Reactでルーティング設定

React_icon React
この記事は約5分で読めます。

開発環境は、以下の通りです。

  • react: 18.2.0
  • typescript: 4.9.5

実現したいこと

Reactで、ルーティング設定をしたい。

ルーティングとは、簡単に言うと画面遷移です。

ReactのようなSPAを実現するためのフレームワークにも画面遷移という概念は存在します。

今回は、どのように画面遷移をしていくかをみていきます。

ルーティング準備

Reactで、ルーティング設定をするためには、

「react-router-dom」というライブラリを使用するのが一般的です。

npm install react-router-dom

これで、正常にインストールされれば準備は完了です。

ルーティング設定

次にルーティング設定を作成します。

注意点としては、「react-router-dom」のバージョン6からは、

「Switch」が使えずに、「Routes」に変更されています。(2行目)

import React from "react";
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
import NotFound from "./pages/NotFound";

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        <Route path="*" element={<NotFound />} />
      </Routes>
    </Router>
  );
}

export default App;

上記コードの11行目〜13行目について、解説します。

「path」はURLを指定します。

基本的にプロジェクトを作成したばかりの段階でのURLは、

「localhost:3000」ですので、この後に続くURLを指定します。

「path=”*”」は、定義していないURLへアクセスした場合という意味になります。

「element」は、ページを作っているコンポーネントを指定します。

<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="*" element={<NotFound />} />

画面遷移処理

ルーティング設定は出来ましたが、このままではURLを直接指定しなければ、画面遷移できません。

次は、画面遷移するためのアクションを追加してみます。

下記サンプルコードは、Home画面のボタンをクリックすると、About画面へ遷移する例です。

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

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

  const gotoAbout = () => {
    navigate("/about");
  };

  return (
    <button onClick={gotoAbout}>
      About
    </button>
  );
}

export default Home;

「react-router-dom」のバージョン6からは、

「useHistory」ではなく、「useNavigate」に変更されています。

useNavigateでは、引数にURLを指定するだけでOKです。

戻る処理の時は、「−1」を渡せばOKです。「useNavigate(-1)」

画面遷移時にデータを渡したいとき

画面遷移する際に、遷移前のページから遷移後のページに

データを渡したいときがあると思います。

そんな時は、useLocationと使うと便利です。

まずは、useNavigateで画面遷移する際の、第2引数を以下のように設定します。

  const gotoAbout = () => {
    navigate("/about", { state: { data: 'aaa' } });
  };

stateプロパティに、遷移後の画面に渡したいデータを追加します。

上記のサンプルコードでは、オブジェクトを設定しています。(stringやnumber型でも可)

次に、遷移後の画面で、以下のようにuseLocationで受け取ります。

const location = useLocation();
const data = location.state.data;

オブジェクトにすれば、複数のデータを一気に送れるので、

個人的にはstateには、オブジェクトを設定しています。

.(ドット)で繋げてプロパティ名を指定できるので、

何のデータなのか直感的に理解できるのもメリットだと思います。

まとめ

今回は、Reactでルーティング設定をする方法について紹介しました。

まずは、「react-router-dom」のインストール。

次に、App.tsxでルーティング設定。

以上です。

これが一番シンプルな方法だと思います。

拡張もできるので、いろいろ試してみてください。

コメント

タイトルとURLをコピーしました