useRouter
El hook useRouter
permite cambiar rutas programáticamente dentro de Componentes del Cliente.
Recomendación: Utilice el componente
<Link>
para navegación a menos que tenga un requisito específico para usaruseRouter
.
useRouter()
router.push(href: string, { scroll: boolean })
: Realiza una navegación del lado del cliente (client-side) a la ruta proporcionada. Añade una nueva entrada en la pila de historial del navegador.router.replace(href: string, { scroll: boolean })
: Realiza una navegación del lado del cliente a la ruta proporcionada sin añadir una nueva entrada en la pila de historial del navegador.router.refresh()
: Actualiza la ruta actual. Hace una nueva solicitud al servidor, vuelve a obtener solicitudes de datos y vuelve a renderizar Componentes del Servidor. El cliente fusionará la carga útil actualizada del Componente del Servidor React sin perder el estado del lado del cliente de React (ej.useState
) o el estado del navegador (ej. posición de desplazamiento).router.prefetch(href: string)
: Prefetch de la ruta proporcionada para transiciones más rápidas del lado del cliente.router.back()
: Navega hacia atrás a la ruta anterior en la pila de historial del navegador.router.forward()
: Navega hacia adelante a la siguiente página en la pila de historial del navegador.
Importante:
- No debe enviar URLs no confiables o no saneadas a
router.push
orouter.replace
, ya que esto puede exponer su sitio a vulnerabilidades de cross-site scripting (XSS). Por ejemplo, URLs conjavascript:
enviadas arouter.push
orouter.replace
se ejecutarán en el contexto de su página.- El componente
<Link>
hace prefetch automáticamente de las rutas cuando se hacen visibles en el viewport.refresh()
podría producir el mismo resultado si las solicitudes de fetch están en caché. Otras APIs dinámicas comocookies
yheaders
también podrían cambiar la respuesta.
Migración desde next/router
- El hook
useRouter
debe importarse desdenext/navigation
y no desdenext/router
cuando se usa el App Router - La cadena
pathname
ha sido eliminada y reemplazada porusePathname()
- El objeto
query
ha sido eliminado y reemplazado poruseSearchParams()
router.events
ha sido reemplazado. Ver más abajo.
Ver la guía completa de migración.
Ejemplos
Eventos del Router
Puede escuchar cambios de página componiendo otros hooks de Componentes del Cliente como usePathname
y useSearchParams
.
Que puede importarse en un layout.
Importante:
<NavigationEvents>
está envuelto en un límiteSuspense
porqueuseSearchParams()
causa renderizado del lado del cliente hasta el límiteSuspense
más cercano durante renderizado estático. Aprenda más.
Desactivar desplazamiento al inicio
Por defecto, Next.js se desplazará al inicio de la página al navegar a una nueva ruta. Puede desactivar este comportamiento pasando scroll: false
a router.push()
o router.replace()
.
Historial de versiones
Versión | Cambios |
---|---|
v13.0.0 | Se introdujo useRouter desde next/navigation . |