Filtrado de Búsquedas en URL con React Router

Clase 26 de 30Curso de React.js: Navegación con React Router

Contenido del curso

Fake authentication con React Router DOM 6

React Router en TODO Machine

Resumen

Integrar la barra de búsqueda con la URL es una práctica habitual en aplicaciones como YouTube o Platzi. Cuando un usuario busca algo, el resultado queda reflejado en la dirección del navegador, lo que permite copiar, pegar y compartir ese enlace para que otra persona vea exactamente los mismos resultados. Este reto pone a prueba todo lo aprendido sobre React Router y URLs dinámicas.

¿En qué consiste el reto de búsqueda en la URL?

La aplicación de todos ya cuenta con una barra de búsqueda funcional que filtra elementos en tiempo real [0:35]. Si escribes, por ejemplo, "cortar", solo aparece el todo que coincide. Si no hay coincidencias, se muestra un mensaje indicando que no hay resultados. Todo esto funciona gracias a un estado de búsqueda (search) dentro de React.

Sin embargo, hay un problema: sin importar lo que se escriba en el input, la URL no cambia [1:07]. Al inspeccionar location.hash en la consola, siempre se mantiene en home. El reto consiste en dos partes:

  • Que lo que el usuario escriba en el campo de búsqueda se refleje en la URL automáticamente.
  • Que si alguien abre una URL con un parámetro de búsqueda, por ejemplo search=patito, la aplicación cargue el home con ese filtro ya aplicado en lugar de mostrar una página not found [1:46].

¿Por qué es importante sincronizar búsqueda y URL?

Esta técnica se conoce como query params o parámetros de consulta. Plataformas como Platzi y YouTube la utilizan para que puedas buscar algo, copiar la URL resultante y compartirla [1:20]. Quien reciba ese enlace verá los mismos resultados de búsqueda sin necesidad de escribir nada manualmente. Es una mejora de experiencia de usuario significativa.

¿Qué herramientas ya tienes para resolverlo?

El curso ya cubrió los fundamentos necesarios:

  • URLs dinámicas: permiten leer parámetros desde la dirección del navegador y usarlos dentro de los componentes [2:12].
  • Hash navigation: la aplicación usa location.hash para manejar las rutas, lo cual es relevante al construir la lógica de lectura y escritura de la URL.
  • Lectura de IDs desde la URL: en clases anteriores se integró React Router para transmitir información entre rutas, hacer condicionales de carga y renderizar contenido dinámico [2:22].

La diferencia ahora es que, en lugar de leer un ID para editar un todo, debes leer un término de búsqueda para filtrar la lista.

¿Cómo abordar la solución paso a paso?

Aunque no se da la respuesta directa, la lógica es clara. Necesitas conectar el estado de search con la URL en ambas direcciones:

  • Cuando el usuario escribe en el input, actualiza la URL con el valor de búsqueda.
  • Cuando la página se carga con un parámetro en la URL, lee ese valor e inicializa el estado de búsqueda con él.

Esto implica usar hooks de React Router como useSearchParams o manipular directamente location.hash y location.search, dependiendo de la estrategia de enrutamiento.

¿Qué se espera al compartir tu solución?

Más allá de si funciona o no, lo valioso es documentar el proceso [2:55]. Los mejores aportes explican qué se intentó, qué falló y qué terminó funcionando. Un comentario del tipo: "probé esto y no funcionó, entonces intenté esto otro y sí funcionó" resulta mucho más útil que simplemente mostrar el resultado final.

Este reto es solo el primero. Una vez resuelto, hay un segundo desafío esperando en la siguiente clase. ¿Ya tienes una idea de cómo sincronizar el input con la URL? Comparte tu enfoque y tus dudas en los comentarios.