Capítulo 384 de 456
Hook do Pages Router pra acessar o objeto router (navegação client-side, query, path) dentro de qualquer function component.
next/router; não funciona em class components (usar withRouter)/pages, sem basePath/locale/trailing slash{} durante prerender sem SSRtrue quando os campos do router estão atualizados client-side; usar só dentro de useEffectoptions.shallow evita rerodar getStaticProps/getServerSidePropspush, mas não adiciona entrada no historypopstate; retornar false assume controle manualwindow.history.back() / window.location.reload()routeChangeStart, routeChangeComplete, routeChangeError, beforeHistoryChange, hashChangeStart, hashChangeComplete)NextRouter | null e funciona em app e pages durante migraçãorouter como propimport { useRouter } from 'next/router'
export default function Page() {
const router = useRouter()
return (
<button type="button" onClick={() => router.push('/about')}>
Click me
</button>
)
}
router.push.import { useRouter } from 'next/router'
export default function MyApp({ Component, pageProps }) {
const router = useRouter()
return <Component key={router.asPath} {...pageProps} />
}
key={router.asPath} quando o state não deve persistir entre navegações da mesma rota dinâmica.import { useEffect } from 'react'
import { useRouter } from 'next/compat/router'
import { useSearchParams } from 'next/navigation'
const MyComponent = () => {
const router = useRouter() // may be null or a NextRouter instance
const searchParams = useSearchParams()
useEffect(() => {
if (router && !router.isReady) return
const search = searchParams.get('search')
}, [router, searchParams])
}
app e pages usando next/compat/router.asPath antes de isReady: pode causar mismatch entre client e server em páginas SSR/estático-otimizadasno-floating-promises em router.push/replace/prefetch: essas chamadas retornam Promise; usar void ou await (exceto dentro de onClick)next/compat/router: useRouter() pode retornar null, então não dá pra desestruturar direto como no next/router purorouter.push/replace aceitam UrlObject para navegação tipada, incluindo rotas dinâmicas via pathname + querypathname no push aplica a query à URL do browser (asPath), preservando rewritesnext/compat/router é a ponte oficial pra migrar componentes de pages para app gradualmenterouter.events) devem ser registrados em useEffect e desregistrados no cleanupuseRouter para ler/atualizar query stringuseRouter