useSearchParams
Summary
現在のURLのURLSearchParamsと、それらを更新する関数のタプルを返します。検索パラメータを設定すると、ナビゲーションが発生します。
import { useSearchParams } from "react-router";
export function SomeComponent() {
const [searchParams, setSearchParams] = useSearchParams();
// ...
}setSearchParams 関数
タプルの2番目の要素は、検索パラメータを更新するために使用できる関数です。これは defaultInit と同じ型を受け入れ、新しいURLへのナビゲーションを引き起こします。
let [searchParams, setSearchParams] = useSearchParams();
// a search param string
setSearchParams("?tab=1");
// a shorthand object
setSearchParams({ tab: "1" });
// object keys can be arrays for multiple values on the key
setSearchParams({ brand: ["nike", "reebok"] });
// an array of tuples
setSearchParams([["tab", "1"]]);
// a `URLSearchParams` object
setSearchParams(new URLSearchParams("?tab=1"));また、React の setState のような関数コールバックもサポートしています。
setSearchParams((searchParams) => {
searchParams.set("tab", "2");
return searchParams;
});setSearchParams の関数コールバックバージョンは、React の setState が実装しているキューイングロジックをサポートしていません。同じティック内で setSearchParams を複数回呼び出しても、前の値に基づいて構築されることはありません。この動作が必要な場合は、setState を手動で使用できます。
注意事項
searchParams は安定した参照であるため、React の useEffect hooks の依存関係として信頼して使用できることに注意してください。
useEffect(() => {
console.log(searchParams.get("tab"));
}, [searchParams]);ただし、これはミュータブルであることも意味します。setSearchParams を呼び出さずにオブジェクトを変更した場合、他の何らかの state がコンポーネントを再レンダーさせると、レンダー間でその値が変更され、URLにはその値が反映されません。
Signature
function useSearchParams(
defaultInit?: URLSearchParamsInit,
): [URLSearchParams, SetURLSearchParams]Params
defaultInit
検索パラメータをデフォルト値で初期化できますが、最初のレンダーでは URL を変更しません。
// a search param string
useSearchParams("?tab=1");
// a shorthand object
useSearchParams({ tab: "1" });
// object keys can be arrays for multiple values on the key
useSearchParams({ brand: ["nike", "reebok"] });
// an array of tuples
useSearchParams([["tab", "1"]]);
// a `URLSearchParams` object
useSearchParams(new URLSearchParams("?tab=1"));戻り値
現在の URLSearchParams と、それらを更新する関数のタプルを返します。