useSearchParams
useSearchParams
は、現在の URL のクエリ文字列を読み取ることができるクライアントコンポーネント用のフックです。
useSearchParams
は、URLSearchParams
インターフェースの読み取り専用バージョンを返します。
パラメータ
useSearchParams
はパラメータを取りません。
返り値
useSearchParams
は、URL のクエリ文字列を読み取るためのユーティリティメソッドを含む URLSearchParams
インターフェースの読み取り専用バージョンを返します:
-
URLSearchParams.get()
: 検索パラメータに関連付けられた最初の値を返します。例:URL searchParams.get("a")
/dashboard?a=1
'1'
/dashboard?a=
''
/dashboard?b=3
null
/dashboard?a=1&a=2
'1'
- すべての値を取得するにはgetAll()
を使用 -
URLSearchParams.has()
: 指定されたパラメータが存在するかどうかを示すブール値を返します。例:URL searchParams.has("a")
/dashboard?a=1
true
/dashboard?b=3
false
-
URLSearchParams
の他の読み取り専用メソッドについて詳しく学びましょう。これにはgetAll()
、keys()
、values()
、entries()
、forEach()
、toString()
が含まれます。
知っておくと良いこと:
useSearchParams
は クライアントコンポーネント 用のフックであり、部分レンダリング 中に古い値が表示されるのを防ぐため、サーバーコンポーネント ではサポートされていません。- アプリケーションに
/pages
ディレクトリが含まれている場合、useSearchParams
はReadonlyURLSearchParams | null
を返します。null
値は移行時の互換性のためであり、getServerSideProps
を使用しないページのプリレンダリング中は検索パラメータが認識できないためです。
動作
静的レンダリング
ルートが静的レンダリングされている場合、useSearchParams
を呼び出すと、最も近い Suspense
境界までのクライアントコンポーネントツリーがクライアントサイドでレンダリングされます。
これにより、ルートの一部を静的にレンダリングしながら、useSearchParams
を使用する動的な部分をクライアントサイドでレンダリングできます。
useSearchParams
を使用するクライアントコンポーネントを <Suspense/>
境界で囲むことを推奨します。これにより、その上のクライアントコンポーネントを静的にレンダリングし、初期 HTML の一部として送信できます。例。
例:
動的レンダリング
ルートが動的レンダリングされている場合、useSearchParams
はクライアントコンポーネントの初期サーバーレンダリング中にサーバーで利用可能になります。
例:
知っておくと良いこと:
dynamic
ルートセグメント設定オプション をforce-dynamic
に設定すると、動的レンダリングを強制できます。
サーバーコンポーネント
ページ
ページ(サーバーコンポーネント)で検索パラメータにアクセスするには、searchParams
プロップを使用します。
レイアウト
ページとは異なり、レイアウト(サーバーコンポーネント)は searchParams
プロップを受け取りません。これは、共有レイアウトがナビゲーション中に再レンダリングされないため、ナビゲーション間で searchParams
が古くなる可能性があるためです。詳細な説明を参照してください。
代わりに、ページの searchParams
プロップを使用するか、クライアントコンポーネントで useSearchParams
フックを使用してください。これにより、最新の searchParams
でクライアント上で再レンダリングされます。
例
searchParams
の更新
新しい searchParams
を設定するには、useRouter
または Link
を使用できます。ナビゲーションが実行されると、現在の page.js
は更新された searchParams
プロップ を受け取ります。
バージョン履歴
バージョン | 変更点 |
---|---|
v13.0.0 | useSearchParams が導入されました。 |