Enlaces y Navegación
El enrutador de Next.js permite realizar transiciones de ruta del lado del cliente entre páginas, similar a una aplicación de una sola página (SPA).
Se proporciona un componente React llamado Link
para realizar esta transición de ruta del lado del cliente.
El ejemplo anterior utiliza múltiples enlaces. Cada uno mapea una ruta (href
) a una página conocida:
/
→pages/index.js
/about
→pages/about.js
/blog/hello-world
→pages/blog/[slug].js
Cualquier <Link />
en el viewport (inicialmente o mediante scroll) será prefetchado por defecto (incluyendo los datos correspondientes) para páginas que usan Generación Estática. Los datos correspondientes para rutas renderizadas en el servidor se obtienen solo cuando se hace clic en el <Link />
.
Enlaces a rutas dinámicas
También puedes usar interpolación para crear la ruta, lo cual es útil para segmentos de ruta dinámicos. Por ejemplo, para mostrar una lista de publicaciones que se han pasado al componente como prop:
En el ejemplo se usa
encodeURIComponent
para mantener la ruta compatible con utf-8.
Alternativamente, usando un Objeto URL:
Ahora, en lugar de usar interpolación para crear la ruta, usamos un objeto URL en href
donde:
pathname
es el nombre de la página en el directoriopages
./blog/[slug]
en este caso.query
es un objeto con el segmento dinámico.slug
en este caso.
Inyección del enrutador
Para acceder al objeto router
en un componente React puedes usar useRouter
o withRouter
.
En general recomendamos usar useRouter
.
Navegación Imperativa
next/link
debería cubrir la mayoría de tus necesidades de enrutamiento, pero también puedes hacer navegaciones del lado del cliente sin él, revisa la documentación de next/router
.
El siguiente ejemplo muestra cómo hacer navegaciones básicas de página con useRouter
:
Enrutamiento Superficial (Shallow Routing)
Ejemplos
El enrutamiento superficial te permite cambiar la URL sin volver a ejecutar los métodos de obtención de datos, lo que incluye getServerSideProps
, getStaticProps
y getInitialProps
.
Recibirás el pathname
actualizado y el query
a través del objeto router
(agregado por useRouter
o withRouter
), sin perder el estado.
Para habilitar el enrutamiento superficial, establece la opción shallow
en true
. Considera el siguiente ejemplo:
La URL se actualizará a /?counter=10
y la página no se reemplazará, solo cambia el estado de la ruta.
También puedes observar cambios en la URL mediante componentDidUpdate
como se muestra a continuación:
Advertencias
El enrutamiento superficial solo funciona para cambios de URL en la página actual. Por ejemplo, supongamos que tenemos otra página llamada pages/about.js
y ejecutas esto:
Como es una nueva página, descargará la página actual, cargará la nueva y esperará la obtención de datos aunque hayamos solicitado un enrutamiento superficial.
Cuando el enrutamiento superficial se usa con middleware, no garantiza que la nueva página coincida con la página actual como se hacía anteriormente sin middleware. Esto se debe a que el middleware puede reescribir dinámicamente y no se puede verificar del lado del cliente sin una obtención de datos que se omite con shallow, por lo que un cambio de ruta superficial siempre debe tratarse como superficial.
Rutas Dinámicas
Las Rutas Dinámicas son páginas que permiten agregar parámetros personalizados a tus URLs. Comienza a crear Rutas Dinámicas y aprende más aquí.
Aplicación Personalizada
Controle la inicialización de páginas y agregue un diseño persistente para todas las páginas sobrescribiendo el componente App predeterminado que utiliza Next.js.