1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React Router `useParams`の使い方

Posted at

背景

下記の記事で説明できなかったuseParamsについてです

やったこと

useParamsを用いて、動的なパラメータを取得して表示しています

コード

// main.jsx
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import App from './App.jsx';

createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>
);
// App.jsx
import { BrowserRouter, Link, Route, Routes } from 'react-router-dom';
import { Page1 } from './Page1.jsx';

function App() {
  return (
    <BrowserRouter>
      <nav>
        {/* このリンクから遷移する */}
        <Link to="/page1/1">page1-1</Link>
        <br />
        {/* このリンクから遷移する */}
        <Link to="/page1/2">page1-2</Link>
      </nav>
      <Routes>
        <Route path="/page1/:id" element={<Page1 />} />
      </Routes>
    </BrowserRouter>
  );
}

export default App;
// Page1.jsx
import { useParams } from 'react-router-dom';

export const Page1 = () => {
  const { id } = useParams(); //ここで使っています

  return (
    <>
      <div>
        <h1>Page1です</h1>
        {/* 表示はここ */}
        <p>URLのIdは{id}です</p>
      </div>
    </>
  );
};

useParamsを用いて、動的なパラメータを取得して表示

useParamsとは?

Returns an object of key/value-pairs of the dynamic params from the current URL that were matched by the routes. Child routes inherit all params from their parent routes.

現在のURLからルートに一致した動的パラメータのキー/値ペアのオブジェクトを返します。子ルートは親ルートからすべてのパラメータを継承します。

useParams

  • URL のパスに含まれている「動的な部分(パラメータ)」を取得するためのフック
  • キー/値のペアオブジェクトを返す
  • 子ルートは親ルートのパラメータを継承

使い方とか

<Route path="/page1/:id" element={<Page1 />} />

呼び出し側・ルート定義の方法はこんな感じです
pathで動的に表現したい部分を/:idとしています

<Link to="/page1/1">page1-1</Link>
<Link to="/page1/2">page1-2</Link>

Linkで動的な部分をこのように指定してあげます
実際のアプリケーションでは、動的な値を指定してあげる感じでしょう

<Link to={`/page1/${id}`}>page1-{id}</Link>

そして、呼び出されるコンポーネント

// Page1.jsx
import { useParams } from 'react-router-dom';

export const Page1 = () => {
  const { id } = useParams(); //ここで使っています

  return (
    <>
      <div>
        <h1>Page1です</h1>
        {/* 表示はここ */}
        <p>URLのIdは{id}です</p>
      </div>
    </>
  );
};
const { id } = useParams();

これで:idに含まれている値を取得することができます

当たり前ですが<Link to="/page1/1">page1-1</Link>をユーザーがクリックした場合、ブラウザのURLがpage1/1となります

その中の動的セグメント:id、今回の場合/1の部分が取得できます。
{ id: "1" }という具合に

そして、URLのIdは1ですと表示されます

感想

  • 詳細画面の表示とかで使えそうなイメージ

参考

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?