React Routerでカスタムフックを使ってオプションのパスパラメータを取得する方法
React Routerにおけるオプションのパスパラメータ
React Routerは、Reactアプリケーションにおけるルーティングを管理するためのライブラリです。オプションのパスパラメータを使用すると、URLに動的な値を含めることができます。これは、さまざまなページやコンポーネントにアクセスするために便利です。
例えば、ユーザーの詳細を表示するページがあるとしましょう。このページにアクセスするには、ユーザーIDをURLに含める必要があります。これは、次のようなパスを使用できます。
/user/:userId
この場合、userId
はオプションのパスパラメータです。つまり、URLに含める必要はありません。
オプションのパスパラメータを使用するには、useParams
フックを使用する必要があります。このフックは、現在のURLのパスパラメータにアクセスするために使用できます。
import { useParams } from "react-router-dom";
const UserPage = () => {
const { userId } = useParams();
return (
<div>
<h1>ユーザーID: {userId}</h1>
</div>
);
};
この例では、useParams
フックを使用して、userId
パスパラメータを取得しています。
デフォルト値
オプションのパスパラメータにデフォルト値を設定できます。これは、パラメータがURLに含まれていない場合に役立ちます。
const UserPage = () => {
const { userId = 1 } = useParams();
return (
<div>
<h1>ユーザーID: {userId}</h1>
</div>
);
};
この例では、userId
パラメータがURLに含まれていない場合は、デフォルト値1
が使用されます。
複数のオプションパラメータを使用できます。
/user/:userId/:postId
この場合、userId
とpostId
はオプションのパスパラメータです。
オプションのパスパラメータは、React RouterでURLに動的な値を含めるための便利な機能です。useParams
フックを使用して、パスパラメータにアクセスできます。
import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
const App = () => {
return (
<Router>
<Switch>
<Route path="/user/:userId" component={UserPage} />
<Route path="/" component={HomePage} />
</Switch>
</Router>
);
};
const UserPage = ({ match }) => {
const { userId } = match.params;
return (
<div>
<h1>ユーザーID: {userId}</h1>
</div>
);
};
const HomePage = () => {
return (
<div>
<h1>ホームページ</h1>
</div>
);
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
このコードは、次の2つのページを提供します。
/user/:userId
: ユーザーIDを表示するページ/
: ホームページ
URLにuserId
パラメータが含まれている場合、UserPage
コンポーネントが表示されます。パラメータはmatch.params
オブジェクトから取得できます。
URLにuserId
パラメータが含まれていない場合、HomePage
コンポーネントが表示されます。
このコードは基本的な例です。オプションのパスパラメータを使用して、より複雑なアプリケーションを作成できます。
- パスパラメータを使用して、データを取得するためにAPIを呼び出すことができます。
- パスパラメータを使用して、コンポーネントに異なるプロパティを渡すことができます。
詳細については、React Routerのドキュメントを参照してください。
オプションのパスパラメータを使用する他の方法
match
オブジェクトは、Route
コンポーネントに渡される props オブジェクトのプロパティです。このオブジェクトには、現在のURLに関する情報が含まれています。
const UserPage = ({ match }) => {
const { userId } = match.params;
return (
<div>
<h1>ユーザーID: {userId}</h1>
</div>
);
};
useLocation
フックは、現在のURLに関する情報を取得するために使用できます。
import { useLocation } from "react-router-dom";
const UserPage = () => {
const location = useLocation();
const { userId } = location.pathname.match(/\/user\/(\d+)/);
return (
<div>
<h1>ユーザーID: {userId}</h1>
</div>
);
};
この例では、useLocation
フックを使用して、現在のURLを取得しています。その後、正規表現を使用してuserId
パラメータを抽出しています。
カスタムフックを作成して、オプションのパスパラメータを取得できます。
import { useEffect, useState } from "react";
const useOptionalParam = (paramName) => {
const [paramValue, setParamValue] = useState(null);
useEffect(() => {
const params = new URLSearchParams(window.location.search);
const value = params.get(paramName);
setParamValue(value);
}, []);
return paramValue;
};
const UserPage = () => {
const userId = useOptionalParam("userId");
return (
<div>
<h1>ユーザーID: {userId}</h1>
</div>
);
};
この例では、useOptionalParam
というカスタムフックを作成しています。このフックは、paramName
パラメータの値を取得し、useState
フックを使用して状態として保持します。
オプションのパスパラメータを使用する方法はいくつかあります。どの方法を使用するかは、アプリケーションのニーズによって異なります。
javascript reactjs react-router