Capítulo 385 de 456
Hook (de next/navigation, compartilhado entre Pages e App Router) que lê a query string atual da URL de forma read-only.
URLSearchParams read-only ou null durante prerenderinggetServerSideProps), retorna null até a hidrataçãogetServerSideProps: retorna os search params reais imediatamente (SSR por request)pages/ e app/, permitindo componentes reutilizáveisimport { useSearchParams } from 'next/navigation'
export default function Dashboard() {
const searchParams = useSearchParams()
if (!searchParams) {
return null // fallback durante prerender
}
const search = searchParams.get('search')
return <>Search: {search}</>
}
null obrigatória antes de usar searchParams.get.const createQueryString = useCallback(
(name: string, value: string) => {
const params = new URLSearchParams(searchParams?.toString())
params.set(name, value)
return params.toString()
},
[searchParams]
)
// router.push(router.pathname + '?' + createQueryString('sort', 'asc'))
useSearchParams (leitura) com useRouter.push (escrita).| URL | searchParams.get("a") |
|---|---|
/dashboard?a=1 | '1' |
/dashboard?a= | '' |
/dashboard?b=3 | null |
/dashboard?a=1&a=2 | '1' (usar getAll() pra pegar todos os valores) |
| URL | searchParams.has("a") |
|---|---|
/dashboard?a=1 | true |
/dashboard?b=3 | false |
.get() sem checar null primeiro: quebra em páginas estaticamente otimizadas durante prerenderuseSearchParams é sempre read-only; escrita de query params passa por router.push/replacenull só ocorre em prerender de página estática do Pages Router, nunca com getServerSideProps<Suspense> no App Router)