Capítulo 189 de 456
Client Component hook that reads the current URL's query string as a read-only URLSearchParams. In Server Components, prefer the page's searchParams prop instead.
ReadonlyURLSearchParams (get, has, getAll, keys, values, entries, forEach, toString).Suspense mais próximo, ser client-side rendered.connection()), o hook fica disponível já no render inicial do servidor.'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}</>
}
import { Suspense } from 'react'
import SearchBar from './search-bar'
function SearchBarFallback() { return <>placeholder</> }
export default function Page() {
return (
<>
<nav><Suspense fallback={<SearchBarFallback />}><SearchBar /></Suspense></nav>
<h1>Dashboard</h1>
</>
)
}
useSearchParams num Suspense para deixar o resto da página prerenderizada como HTML estático inicial.| URL | searchParams.get("a") |
|---|---|
/dashboard?a=1 | '1' |
/dashboard?a= | '' |
/dashboard?b=3 | null |
/dashboard?a=1&a=2 | '1' (use getAll()) |
useSearchParams de um Client Component precisa de Suspense — em dev isso funciona sem erro (rotas renderizadas sob demanda), o que mascara o problema até o build.connection() num Server Component antes, em vez do antigo export const dynamic = 'force-dynamic'.searchParams (evitaria re-render e ficaria stale); só Pages recebem o prop.useRouter/Link para escrever novos search params preservando os existentes.