Contenido del curso

Clonar React Router desde cero

Resumen

Clonar React Router en React es el reto final para entender cómo funciona la navegación SPA por dentro. Vas a construir tus propios componentes HashRouter, Route y Link, además de custom hooks como useLocation y useNavigate, replicando la lógica de react-router-dom desde cero.

Este ejercicio cierra el ciclo de aprendizaje sobre enrutamiento en JavaScript: pasaste de un router vainilla basado en location.hash a una versión componetizada en React, lista para reusar en cualquier proyecto.

Qué significa clonar React Router en React

La idea es replicar el comportamiento de react-router-dom sin instalarlo. En el reto anterior ya construiste un router en JavaScript puro que escuchaba location.hash y renderizaba contenido distinto según la ruta. Ahora toca llevar esa misma lógica al mundo de los componentes.

¿Qué hace un HashRouter? Lee el valor de location.hash en la URL y decide qué componente renderizar. Cuando el hash cambia, el router actualiza la vista sin recargar la página.

No necesitas que el código quede perfecto en el primer intento. La consigna es clara: primero haz que funcione, después lo refactorizas.

Cómo construir HashRouter, Route y Link paso a paso

El reto principal se compone de tres piezas que trabajan juntas. Cada una tiene una responsabilidad concreta dentro del sistema de navegación.

Cómo crear tu propio componente HashRouter

El HashRouter es el contenedor que envuelve toda la app y mantiene el estado de la ruta actual. Su trabajo es escuchar los cambios en location.hash y notificar a los componentes hijos para que renderen lo que corresponde.

Puedes apoyarte en el Context API de React para compartir la ruta activa con cualquier componente anidado. Así, Route y Link podrán leer y modificar esa ruta sin pasar props manualmente.

Cómo funciona el componente Route con la propiedad path

El componente Route recibe una propiedad path y decide si renderiza o no su contenido. Si el path hace match con el hash actual, muestra el componente; si no, devuelve null.

¿Cómo decide Route qué renderizar? Compara su prop path con el hash actual de la URL. Si coinciden, renderiza el componente hijo; si no, no devuelve nada.

El nombre de la prop lo eliges tú. Puede ser path, route o lo que prefieras, siempre que mantengas consistencia.

Por qué necesitas un componente Link en lugar de una etiqueta a

Una etiqueta a normal dispara una nueva petición HTTP y rompe la experiencia SPA. El componente Link evita eso: usa JavaScript para cambiar la URL y, en consecuencia, la ruta renderizada, sin recargar el HTML.

Puedes usar la etiqueta que prefieras por dentro, lo importante es que el cambio de ruta ocurra en cliente. Esa es la diferencia clave entre navegación tradicional y navegación SPA.

Cómo replicar los custom hooks useLocation y useNavigate

Si quieres llevar el reto un paso más allá, clona también los custom hooks de react-router-dom. Estos hooks permiten interactuar con el router desde cualquier componente funcional sin pasar props.

  • useLocation: devuelve información sobre la ruta actual, como el hash o el pathname.
  • useNavigate: retorna una función que cambia la URL programáticamente desde JavaScript.
  • Otros hooks que quieras explorar, como los relacionados con parámetros o búsqueda.

La lógica detrás es la misma del HashRouter: leer y escribir sobre location.hash, y notificar los cambios al resto de la app mediante contexto o estado.

Qué aprenderás al terminar este reto de React

Más allá del código, este ejercicio te deja claridad sobre cómo funcionan las librerías que usas todos los días. Entender el motor interno de React Router cambia tu forma de leer documentación y de depurar bugs.

  • Manejo de location.hash como fuente de verdad para la ruta.
  • Composición de componentes con Context API para compartir estado global.
  • Diferencia entre navegación tradicional con etiqueta a y navegación SPA con un Link personalizado.
  • Creación de custom hooks que encapsulan lógica reutilizable.

Cuando termines, comparte tu versión en los comentarios. La idea es ver qué soluciones aparecen en la comunidad, comparar enfoques y mejorar iteración tras iteración hasta tener una versión sólida de React Router hecha por ti.