Saltar al contenido
EspañolEnglish
Todos los componentes (204)

Enrutado

Más · RouterProvider

Qué es y cuándo usarlo

Lleva los enlaces de la biblioteca (Link, ButtonLink, las migas, el menú lateral, el título de una tarjeta con href) por el enrutador de la aplicación: el clic navega sin recargar la página y, si el enrutador sabe precargar, el destino se pide antes de pulsar. Sin proveedor, cada enlace es un <a href> de verdad y cada clic recarga la página entera: funciona, pero no es lo que se espera de una aplicación.

En Next no hay que escribir el puente. Dos proveedores listos, que se ponen una vez arriba del árbol:

// App Router (layout o proveedor de cliente)
import { NextRouterProvider } from '@amset/ui/next'

// Pages Router (pages/_app)
import { NextPagesRouterProvider } from '@amset/ui/next/pages'

Navegan con router.push y precargan con router.prefetch al posar el ratón o dar el foco, como next/link. next es una dependencia opcional: quien no importe esos dos subpaths no carga nada de Next, y en React puro el paquete principal no sabe que existe.

En React Router, Vite o cualquier otro enrutador, el proveedor genérico:

import { RouterProvider } from '@amset/ui'

const navigate = useNavigate()
<RouterProvider navigate={(href) => { navigate(href) }}>…</RouterProvider>

Cuándo usarlo

  • Una vez, arriba del árbol, en cualquier aplicación con enrutado de cliente.
  • prefetch es opcional: si el enrutador no sabe precargar, no se pasa y no ocurre nada. Se llama una vez por destino.

Cuándo no

  • No hace falta para un destino que sale de la aplicación: otro dominio, mailto:, tel:, una descarga o un target propio los resuelve el navegador y el proveedor no los toca.
  • Un botón que no cambia de sitio no es un enlace: Button.

Teclado: no tiene, es un proveedor. Con Control, Cmd, Mayúsculas o el botón central el enlace se abre en otra pestaña, como cualquier enlace: el proveedor no interviene.

Accesibilidad: no cambia nada de lo que anuncia el lector: sigue siendo un <a href> y se dice «enlace». Copiar la dirección, abrir en otra pestaña y los menús del navegador siguen funcionando.

Aspecto fino: no pinta nada.

Cómo se ve

Este enlace no recarga la página: ir a Button

Todavía no has pulsado el enlace.

<RouterProvider navigate={(href) => router.push(href)}>
  <Link href="/componentes/button/">ir a Button</Link>
</RouterProvider>

Props

Se importa con import { RouterProvider } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
childrenobligatoriaReactNode—
navigateobligatoria(href: string) => voidLleva a esa direccion sin recargar la pagina. Se le pasa el `href` tal cual esta escrito en el enlace: el `router.push` de Next, el `navigate` de React Router o lo que use el proyecto.
prefetch(href: string) => voidPide por adelantado lo que necesita esa direccion, para que el clic sea instantaneo: el `router.prefetch` de Next. Es opcional; se llama una vez por destino cuando el raton se posa sobre el enlace o este recibe el foco, que es cuando `next/link` empieza a cargar lo suyo en un enlace sin `prefetch`.

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: