👉 ¿Hablamos de Frontend? Mira mis clases personalizadas en Perú 🧑‍💻
¡Link copiado!

¿Cómo redirigir en React Router v5 conservando todos los parámetros?

Buenas prácticas | | 2 minutos

Redirigir rutas en React Router v5 parece sencillo… hasta que necesitas conservar los parámetros. Si estás usando <Redirect> y te diste cuenta de que los parámetros desaparecen en el salto de ruta, este artículo es para ti.

❓El problema

Estás intentando hacer algo como esto:

   <Redirect exact from='/:store' to={ROUTES.products} />

Y esperas que al visitar /tienda-x, te redirija a /productos?store=tienda-x. Pero sorpresa: React Router v5 no pasa los params automáticamente.

¿Y ahora qué?

Tienes dos caminos para lograrlo: con render en la ruta o usando un componente dedicado. Vamos por partes.

🔀 Opción 1: Usar render para acceder a los params

   <Route
	exact
	path='/:store'
	render={({ match }) => <Redirect to={`${ROUTES.products}?store=${match.params.store}`} />}
/>

Esto funciona si sabes qué parámetro esperas (store, en este caso).

🔄 Opción 2: Redirigir con un componente que conserva todo

Esta es la forma más flexible: usamos useLocation para recuperar lo que venga por la URL, y lo pasamos tal cual al nuevo destino.

   import { Redirect, useLocation } from 'react-router-dom'

const RedirectWithParams = () => {
	const location = useLocation()

	return <Redirect to={`${ROUTES.products}${location.search}`} />
}

Y lo usas así:

   <Route exact path='/:store' component={RedirectWithParams} />

💡 Esto conserva los query params, como ?ref=campaña1, etc.

⚠️ Ojo: Esto no copia los path params, solo los query. Si quieres conservar /:store como parte de la nueva ruta, tendrías que capturar match.params también.

¿Y si no sé qué parámetros llegarán?

Perfecto. la segunda opción es tu mejor aliada. Es sencilla, clara y se adapta a lo que venga por la URL.

✅ Conclusión

Con React Router v5 puedes redirigir y conservar todos los parámetros fácilmente. Usa render si sabes los params que vienen, o crea un componente con useLocation para algo más dinámico.

¡Gracias por leer!

Si te ha gustado este artículo, ¡compártelo con tus amigos y seguidores! Tu apoyo me motiva a llegar a más personas y a seguir creando contenido increíble para ti.