useSearchParams
useSearchParams
は現在のURLのクエリ文字列を読み取ることができるClient Componentフックです。
useSearchParams
は、URLSearchParams
インターフェイスの読み取り専用バージョンを返します。
- TypeScript
- JavaScript
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// URL -> `/dashboard?search=my-project`
// `search` -> 'my-project'
return <>Search: {search}</>
}
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// URL -> `/dashboard?search=my-project`
// `search` -> 'my-project'
return <>Search: {search}</>
}
Parameters
const searchParams = useSearchParams()
useSearchParams
はパラメータを一切受け 取りません。
Returns
useSearchParams
は、URLSearchParams
インターフェイスの読み取り専用バージョンを返します。これにはURLのクエリ文字列を読み取るためのユーティリティメソッドが含まれています:
-
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()
が含まれます。
Good to know:
useSearchParams
はClient Componentフックであり、値の古さを防ぐためServer Componentsではサポートされていません部分的レンダリング。- アプリケーションに
/pages
ディレクトリが含まれている場合、useSearchParams
はReadonlyURLSearchParams | null
を返します。null
値は移行中の互換性のためであり、検索パラメータがgetServerSideProps
を使用しないペー ジのプリレンダリングで知られることはできません。
Behavior
Static Rendering
ルートが静的にレンダリングされている場合、useSearchParams
を呼び出すと最も近いSuspense
境界までのClient Componentのツリーがクライアント側でレンダリングされます。
これにより、ルートの一部が静的にレンダリングされる一方で、useSearchParams
を使用する動的部分がクライアント側でレンダリングされます。
useSearchParams
を使用するClient Componentを<Suspense/>
境界でラップすることをお勧めします。これにより、その上のClient Componentが静的にレンダリングされ、初期HTMLの一部として送信されます。 例。
例えば:
- TypeScript
- JavaScript
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// 静的レンダリングを使用する場合、このログはサーバーでは行われません
console.log(search)
return <>Search: {search}</>
}
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// 静的レンダリングを使用する場合、このログはサーバーでは行われません
console.log(search)
return <>Search: {search}</>
}
- TypeScript
- JavaScript
import { Suspense } from 'react'
import SearchBar from './search-bar'
// このコンポーネントはSuspense境界にフォールバックとして 渡され
// 検索バーの代わりに初期HTMLでレンダリングされます。
// Reactのハイドレーション時に値が利用可能な際、フォールバック
// は`<SearchBar>`コンポーネントに置き換えられます。
function SearchBarFallback() {
return <>placeholder</>
}
export default function Page() {
return (
<>
<nav>
<Suspense fallback={<SearchBarFallback />}>
<SearchBar />
</Suspense>
</nav>
<h1>Dashboard</h1>
</>
)
}
import { Suspense } from 'react'
import SearchBar from './search-bar'
// このコンポーネントはSuspense境界にフォールバックとして渡され
// 検索バーの代わりに初期HTMLでレンダリングされます。
// Reactのハイドレーション時に値が利用可能な際、フォールバック
// は`<SearchBar>`コンポーネントに置き換えられます。
function SearchBarFallback() {
return <>placeholder</>
}
export default function Page() {
return (
<>
<nav>
<Suspense fallback={<SearchBarFallback />}>
<SearchBar />
</Suspense>
</nav>
<h1>Dashboard</h1>
</>
)
}
Dynamic Rendering
ルートが動的にレンダリングされている場合、useSearchParams
はClient Componentの初期サーバーレンダリング中にサーバー上で利用可能です。
例えば:
- TypeScript
- JavaScript
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// これは初期レンダリングでサーバーにログされ
// 以降のナビゲーションでクライアントにログされます
console.log(search)
return <>Search: {search}</>
}
'use client'
import { useSearchParams } from 'next/navigation'
export default function SearchBar() {
const searchParams = useSearchParams()
const search = searchParams.get('search')
// これは初期レンダリングでサーバーにログされ
// 以降のナビゲーションでクライアントにログされます
console.log(search)
return <>Search: {search}</>
}
- TypeScript
- JavaScript
import SearchBar from './search-bar'
export const dynamic = 'force-dynamic'
export default function Page() {
return (
<>
<nav>
<SearchBar />
</nav>
<h1>Dashboard</h1>
</>
)
}
import SearchBar from './search-bar'
export const dynamic = 'force-dynamic'
export default function Page() {
return (
<>
<nav>
<SearchBar />
</nav>
<h1>Dashboard</h1>
</>
)
}