Contenido del curso

Herramientas avanzadas: escalabilidad, organización y persistencia

Cómo migrar entre versiones de React JS

Resumen

Aprender a migrar entre versiones de React JS es una habilidad clave para cualquier front-end developer profesional. Aquí descubrirás cómo bajar de React 18 a React 17, por qué importa entender estos cambios y cuándo conviene actualizar (o no) la versión de React en un proyecto real.

Por qué cambiar de versión en React JS rompe tu proyecto

React JS evoluciona constantemente porque tiene detrás al equipo de Facebook y una comunidad open source que publica nuevas versiones con frecuencia. Cada cambio puede traer optimizaciones internas o modificar APIs que tus componentes ya usaban.

En el ejercicio cambiamos la versión de React en el package.json de 18 a 17.0.2. Al ejecutar npm start, aparece un error contundente: cannot resolve react-dom/client. Ese mensaje revela que el cliente de ReactDOM, el responsable de convertir tus componentes en HTML, JavaScript y CSS, ya no existe en versiones anteriores a la 18.

¿Por qué falla react-dom/client al bajar de versión? Porque la ruta react-dom/client y el método createRoot se introdujeron en React 18. En React 17 esa carpeta no existe y debes volver a usar ReactDOM.render.

Cómo reinstalar dependencias correctamente

Antes de cambiar de versión, conviene limpiar el entorno para evitar conflictos con dependencias viejas. Es una práctica que te salvará de muchos dolores de cabeza cuando algo no instala bien [04:30].

  • Borra la carpeta node_modules con rm -rf node_modules.
  • Elimina el archivo package-lock.json para forzar una resolución limpia.
  • Ejecuta npm install para descargar las nuevas versiones declaradas.

Este proceso se demora un poco más, pero garantiza que no arrastres versiones desactualizadas ni configuraciones rotas.

Cómo migrar de React 18 a React 17 paso a paso

La documentación oficial de React explica el salto entre la versión 17 y la 18, y nosotros lo recorremos al revés. La clave está en la nueva root API que React 18 introdujo para habilitar el renderizado concurrente, una funcionalidad en la que el equipo trabajó durante años [11:20].

En React 18 el index.js se ve así:

js import ReactDOM from 'react-dom/client'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<App />);

Para React 17 debes volver a la API anterior, donde ReactDOM.render recibe directamente el componente y el contenedor:

js import ReactDOM from 'react-dom'; ReactDOM.render(<App />, document.getElementById('root'));

Con ese cambio, la aplicación vuelve a funcionar: filtros, eliminación de tareas, persistencia y portales siguen operando igual. Lo único que cambió fue la forma en que React conecta tus componentes con el DOM.

¿Qué diferencia hay entre ReactDOM.render y createRoot? ReactDOM.render es la API clásica usada hasta React 17. createRoot la reemplaza desde React 18 y habilita el renderizado concurrente con mejor manejo de actualizaciones.

Cómo leer la documentación oficial al revés

Una técnica útil es buscar en Google algo específico como change React 18 to 17.0.2. La documentación oficial de React publica guías de migración pensadas para subir de versión, pero te sirven igual para bajar: solo aplicas los pasos en sentido contrario.

Por qué un front-end debe saber moverse entre versiones de React

Querer aprender siempre la última versión es natural, pero la realidad laboral es distinta. Muchas empresas grandes mantienen versiones antiguas porque migrar miles de archivos cuesta tiempo, dinero y riesgo. Hay equipos que aún trabajan con React 13, React 15 o React 16, y no es un error: es una decisión de arquitectura.

Imagina entrar a un equipo de desarrollo y descubrir que el proyecto usa React 13. Decir yo solo trabajo con React 18 no es opción. La habilidad real es adaptarte a la versión que use tu equipo y entender por qué esa decisión tiene sentido para el negocio y los usuarios.

  • Las migraciones pueden afectar cientos o miles de archivos en empresas grandes.
  • El tiempo invertido en migrar compite con tiempo para arreglar bugs o lanzar features.
  • A veces una migración mejora la experiencia de usuario (por ejemplo, un segundo menos de carga) y entonces sí vale la pena.

Cuándo conviene actualizar y cuándo no

La decisión de migrar depende del balance entre costo y beneficio. Si actualizar a una nueva versión de React reduce el tiempo de carga o desbloquea funcionalidades críticas, el esfuerzo se justifica. Si solo es por seguir la tendencia, probablemente no.

¿Por qué algunas empresas siguen usando versiones antiguas de React? Porque migrar miles de archivos consume tiempo que podría usarse para resolver bugs o lanzar features. Mientras la versión actual cumpla los objetivos del producto, mantenerla suele ser la decisión correcta.

Reto: instalar React 16.0.0 y trabajar con clases

Antes de la versión 16.8, React no tenía hooks. No existían useState ni useEffect, y todo el manejo de estado se hacía con clases que extendían de React.Component y usaban métodos de ciclo de vida [22:40]. Muchas empresas siguen manteniendo código basado en clases, así que dominar ese estilo te abre más puertas.

El reto opcional es instalar React 16.0.0, reescribir tus componentes como clases y practicar la programación orientada a objetos dentro de React. Ese ejercicio te prepara para escenarios reales donde la versión del proyecto no es la que esperabas.

¿Te animas a probarlo? Cuéntame en los comentarios qué versión usas en tu trabajo o en tus proyectos personales.