useNavigate
useNavigate() devuelve una función para cambiar de ruta desde lógica imperativa (botones, handlers, efectos, etc.).
(to: string, options?: { replace?: boolean; state?: unknown }) => voidParámetros
Sección titulada «Parámetros»| Parámetro | Tipo | Qué hace |
|---|---|---|
to | string | Ruta interna destino (/dashboard, /users/42, /search?q=cat#top) |
options | NavigateOptions | Configuración opcional de la navegación |
options.replace
Sección titulada «options.replace»falseoundefined(por defecto): usahistory.pushState(agrega una entrada al historial).true: usahistory.replaceState(reemplaza la entrada actual).
Úselo cuando no quiere que la ruta anterior quede en el historial, por ejemplo después de login/logout.
options.state
Sección titulada «options.state»Permite asociar datos a la entrada del historial actual.
- Tipo:
unknown - Se almacena en el
history statedel navegador. - Es útil para pasar metadatos de navegación (ej.
source,fromModal,tracking).
Nota: Michi Router no expone un hook propio para leer ese estado; puede consultarlo con
window.history.statesi su caso lo requiere.
Ejemplos prácticos
Sección titulada «Ejemplos prácticos»import { useNavigate } from '@arielgonzaguer/michi-router/core';
function Actions() { const navigate = useNavigate();
return ( <> <button onClick={() => navigate('/profile')}>Perfil</button> <button onClick={() => navigate('/login', { replace: true })}>Salir</button> <button onClick={() => navigate('/search?q=michi#top', { state: { source: 'hero' } })}> Buscar </button> </> );}Cuándo usar replace: true
Sección titulada «Cuándo usar replace: true»// Caso típico: login exitosoawait signIn(email, password);navigate('/dashboard', { replace: true });Con esto, al presionar “atrás”, no vuelve al formulario de login.
Cuándo usar state
Sección titulada «Cuándo usar state»navigate('/checkout', { state: { source: 'cart', couponApplied: true } });Puede usar ese estado para analytics o UX condicional.
Errores comunes
Sección titulada «Errores comunes»- Navegar a URL externa con
navigate('https://...')(se bloquea por seguridad). - Usar
navigatepara enlaces visuales simples en JSX (useLinkpara navegación declarativa). - Esperar que
replaceconserve la entrada anterior (justamente la reemplaza).
Seguridad
Sección titulada «Seguridad»- Solo acepta navegación interna válida.
- URLs externas o protocolos inseguros se bloquean.