Contenido del curso

Cómo migrar React portals a rutas reales

Resumen

Migrar un proyecto existente a React Router es una de las tareas más comunes cuando entras a trabajar en una empresa, agencia o startup. Aquí aprenderás a tomar Todo Machine, un proyecto heredado, e integrarle rutas dinámicas para reemplazar portales y modales por navegación real.

¿Por qué migrar un proyecto existente en lugar de empezar desde cero?

En la mayoría de los trabajos no vas a planear la arquitectura desde cero. Vas a recibir un código que alguien más escribió, con decisiones que quizá no compartes, y tu tarea será adaptarlo para implementar nuevas features o resolver bugs dentro de un sprint.

Ese es exactamente el ejercicio: tomar Todo Machine, fingir que no lo conocías y aplicarle rutas. Así entrenas el músculo más útil para tu carrera real como desarrollador.

¿Qué es un proyecto heredado? Es un proyecto que ya empezó hace tiempo y al que te sumas sin haber participado en su arquitectura inicial. Tu reto es adaptarte a las herramientas y estructura que ya existen [00:24].

¿Qué es Todo Machine y qué rutas vamos a crear?

Todo Machine es una aplicación de tareas con contador, buscador, lista de todos y un modal para agregar nuevas tareas. Ese modal se abre como un portal hacia otro nodo HTML, y eso es justo lo que vamos a eliminar [01:32].

La nueva estructura de navegación queda así:

  • / o /home: la página principal con TodoCounter, TodoSearch y la lista de todos.
  • /new: una ruta dedicada al formulario para crear una nueva tarea, reemplazando al modal.
  • /edit/:id: una ruta dinámica que carga el formulario con el texto del todo seleccionado.

Esto implica que la interactividad ya no depende solo de prender o apagar estados, sino de navegación real entre rutas. Cancelar te devuelve al home, añadir valida y también te devuelve al home tras crear el todo.

¿Por qué los todos necesitan un ID único?

En los cursos anteriores se decidió identificar cada todo por su texto, bajo la lógica de que dos tareas no deberían repetirse. Pero al introducir la edición, el texto cambia, y eso rompe bases de datos, historial de navegación y rutas [04:32].

La solución es asignar un ID único a cada todo. Ese ID viaja en la URL como parámetro dinámico, y con useParams puedes leerlo dentro del componente para buscar en local storage el todo correspondiente y precargarlo en el textarea.

¿Para qué sirve useParams en React Router? Es un hook que te permite leer los parámetros dinámicos de una URL. Si tu ruta es /edit/:id, useParams te devuelve ese id para que lo uses dentro del componente.

¿Cómo descargar el proyecto e instalar React Router DOM v6?

El código vive en el repositorio curso-react-router-proyecto2, organizado en ramas, una por cada clase del curso. Empieza con la rama Inicio curso RR [05:50].

Los pasos para arrancar son:

  1. Clonar el repositorio con git clone en la carpeta de tu preferencia.
  2. Abrir el proyecto en tu editor de código.
  3. Ejecutar npm install para instalar dependencias.
  4. Correr npm start para levantar el servidor en localhost:3000.

Si npm install falla, elimina la carpeta node_modules, el archivo package-lock.json y el yarn.lock, y vuelve a intentarlo. Si el problema persiste, deja tu duda en los comentarios marcada como pregunta.

¿Cómo se instala React Router DOM v6?

El comando es directo:

bash npm install -S react-router-dom@6

El flag -S equivale a --save, y especificar la versión 6 evita sorpresas si en el futuro salen versiones nuevas con APIs distintas [09:55].

¿Qué error común aparece con completeTodo y cómo se resuelve?

Al correr el proyecto, puede aparecer el error complete Todo is not a function. La causa está en el custom hook useTodos, donde la función completeTodo quedó dentro del objeto state cuando debería estar en stateUpdaters, porque es un actualizador de estado, no un estado [07:56].

Mover esa función al objeto correcto restaura el funcionamiento. Una vez resuelto, puedes completar todos, filtrar con el buscador y verificar que local storage persiste tu información al recargar.

¿Qué componentes vas a eliminar al migrar a rutas?

La lógica del modal y los React portals desaparece por completo. Todo lo que en el código actual diga modal o React portal se elimina, porque su función se reemplaza con navegación entre rutas [09:25].

El resto de la arquitectura se conserva: la composición de TodoHeader, TodoCounter, TodoSearch, TodoList y TodoItem sigue intacta, junto con los custom hooks useTodos y useLocalStorage que centralizan la lógica.

Antes de pasar a la siguiente clase, revisa cada componente del proyecto. Identifica dónde se usa el modal, dónde se renderiza el formulario y cómo fluyen las props. Cuéntame en los comentarios qué parte del proyecto te parece más retadora de migrar.