React Router v6 履歴操作 解説
React Router v6 での履歴操作の解説 (日本語)
React Router v6 では、履歴操作の仕組みが大幅に変更されました。これにより、より直感的で柔軟なルーティングが可能になりました。
主要な概念
useSearchParams
: URLパラメータを操作するためのフックです。useLocation
: 現在のルートの情報を取得するためのフックです。useNavigate
: 現在のルートから別のルートにプログラム的に遷移するためのフックです。
具体的な使い方
useNavigate を使ってルートに遷移する
import { useNavigate } from 'react-router-dom';
function MyComponent() {
const navigate = useNavigate();
const handleClick = () => {
navigate('/abou t'); // '/about' に遷移します
};
return (
<button onClick={handleClick}>Go to About</button>
);
}
useLocation で現在のルート情報を取得する
import { useLocation } from 'react-router-dom';
function MyComponent() {
const location = useLocation();
return (
<div>
<h1>Current Path: {location.pa thname}</h1>
</div>
);
}
useSearchParams でURLパラメータを操作する
import { useSearchParams } from 'react-router-dom';
function MyComponent() {
const [searchParams, setSearchParams] = useSearchParams();
const handleSearch = (query) => {
setSearchParams({ query }); // URLパラメータに 'query' を追加します
};
return (
<div>
<input type="text" onChange={(e) => handleSearch(e.target.value)} />
</div>
);
}
重要なポイント
- 柔軟なパラメータ操作:
useSearchParams
フックを使用することで、URLパラメータを簡単に操作できます。 - 履歴操作の管理: React Routerが自動的に履歴を管理するため、ブラウザの戻る/進むボタンや履歴操作のAPIを使用する必要はありません。
- プログラム的な遷移: React Router v6 では、リンクタグを使用する代わりに、
useNavigate
フックを使用してプログラム的にルートを遷移します。
import { useNavigate } from 'react-router-dom';
function MyComponent() {
const navigate = useNavigate();
const handleClick = () => {
navigate('/abou t'); // '/about' に遷移します
};
return (
<button onClick={handleClick}>Go to About</button>
);
}
- 解説
useNavigate
フックを使用して、現在のルートから/about
ルートに遷移します。- ボタンをクリックすると、
handleClick
関数が呼び出され、navigate
関数を使って遷移が実行されます。
import { useLocation } from 'react-router-dom';
function MyComponent() {
const location = useLocation();
return (
<div>
<h1>Current Path: {location.pa thname}</h1>
</div>
);
}
- 解説
useLocation
フックを使用して、現在のルートの情報を取得します。location.pathname
プロパティには、現在のルートのパスが格納されています。
import { useSearchParams } from 'react-router-dom';
function MyComponent() {
const [searchParams, setSearchParams] = useSearchParams();
const handleSearch = (query) => {
setSearchParams({ query }); // URLパラメータに 'query' を追加します
};
return (
<div>
<input type="text" onChange={(e) => handleSearch(e.target.value)} />
</div>
);
}
- 解説
useSearchParams
フックを使用して、URLパラメータを操作します。searchParams
配列には、現在のURLパラメータが格納されています。- 入力フィールドの値が変更されると、
handleSearch
関数が呼び出され、setSearchParams
関数を使ってURLパラメータにquery
を追加します。
リンクタグを使用する
最もシンプルな方法は、従来のリンクタグを使用することです。
import { Link } from 'react-router-dom';
function MyComponent() {
return (
<Link to="/about">Go to About</Link>
);
}
この方法では、リンクをクリックすると、ブラウザの履歴が自動的に更新されます。
historyオブジェクトを使用する
React Router v6では、history
オブジェクトは直接使用することはできません。しかし、useNavigate
フックの内部では、history
オブジェクトが使用されています。特定のユースケースでは、history
オブジェクトに直接アクセスする必要がある場合もあります。このような場合は、useNavigate
フックの内部でhistory
オブジェクトを取得し、使用することができます。
カスタムフックを作成する
複雑な履歴操作が必要な場合は、カスタムフックを作成して、useNavigate
, useLocation
, useSearchParams
フックの機能を拡張することができます。
ブラウザの履歴APIを使用する
React Router v6は、ブラウザの履歴APIを抽象化して、より使いやすいインターフェースを提供します。しかし、特定のユースケースでは、ブラウザの履歴APIを直接使用することもできます。
注意
- カスタムフックを作成する場合は、コードの可読性と保守性を考慮する必要があります。
- ブラウザの履歴APIを使用する場合は、ブラウザの互換性やセキュリティに注意が必要です。
javascript reactjs react-router-dom