Han pasado dos años y medio desde que se lanzó React v16 por primera vez. El equipo de desarrollo promete que la actualización v17 es increíblemente importante para el futuro de React, pero afirma que no se ha agregado nuevas funcionalidades. ¿Qué significa eso exactamente? ¿Y cómo puede React afirmar que está lanzando una nueva versión importante sin agregar nuevas funciones?
Las actualizaciones anteriores de React siempre han provocado la desaprobación de versiones anteriores. Esto podría hacer que sea increíblemente difícil para los equipos actualizar sus versiones de React, especialmente cuando se trabaja con bases de código grandes o descuidadas. Por lo tanto, el equipo de React ha decidido que v17 sentará las bases para un nuevo método de adopción de actualizaciones. Cuando se lance React v18, los desarrolladores podrán elegir actualizar solo partes de su aplicación y mantener otras partes ejecutándose en v17. React desaconseja esto si su aplicación se mantiene de forma activa o en producción a gran escala, pero puede ayudar a los equipos que no mantienen activamente su aplicación o que no necesitan migrar ciertos componentes a la versión más nueva. En el futuro, las nuevas versiones de React no dejarán atrás estas aplicaciones ni exigirán migraciones masivas.
Para habilitar esta capacidad, el equipo de React ha dedicado algún tiempo a reelaborar el sistema de eventos. Estas actualizaciones son las que causaron que React v17 fuera una versión importante, ya que podría romper muchas aplicaciones.
Al contrario de lo que podría pensar, React no adjunta eventos a elementos individuales. En cambio, React vincula un controlador por tipo de evento al document nodo. Este enfoque aumenta el rendimiento en aplicaciones con árboles de elementos grandes y también habilita funciones como la reproducción de eventos.
En segundo plano, React puede capturar un evento y determinar a qué componente llamar antes de propagar el evento en el árbol de componentes. Sin embargo, en Javascript nativo, el evento ya se ha propagado al document nivel. Si bien esto puede no parecer un problema, este sistema se rompe cuando se ejecutan varias instancias de React. Si una aplicación React anidada dentro de otra ha detenido la propagación del evento, la aplicación principal React aún capturará el evento. Este fue un gran dolor de cabeza para los desarrolladores que buscan anidar diferentes versiones de React. Puede que no piense que esto sucede en producción, ¡pero el editor de código Atom encontró este problema hace cuatro años!
React ahora adjuntará controladores de eventos al nodo raíz de la aplicación React. Este cambio permitirá la anidación segura de árboles React entre sí. Por supuesto, todas las instancias de React deberán ejecutarse en la versión 17 o superior para que esto funcione. Esta actualización también significa que las aplicaciones React son más fáciles de integrar dentro de otros marcos como jQuery. React ahora evitará que los eventos se propaguen a jQuery como era de esperar.
Es bastante común devolver una función de limpieza dentro de un useEffect método para detener cualquier código que se ejecute dentro de la función. En el pasado, esta función de limpieza se ejecutaba sincrónicamente antes de que se dibujara el siguiente fotograma. En realidad, la mayoría de las aplicaciones no requieren que las actualizaciones de pantalla se retrasen, sino que ejecutan métodos de limpieza. Así que ahora se ejecutarán de forma asincrónica después de que React haya renderizado el siguiente fotograma. Esto debería resultar en tiempos de cambio más rápidos entre componentes. Aún puede usar el useLayoutEffect método para ejecutar un método de limpieza que bloquee el bucle de procesamiento.
La agrupación de eventos es increíblemente confusa y no proporciona ninguna optimización en los navegadores modernos. En cambio, puede provocar algunos errores extraños al trabajar con varios componentes que reciben el mismo evento. Un controlador de eventos podría establecer el evento como nulo y, por lo tanto, los otros componentes que usan el evento se encontrarían con un error de variable nula. En resumen, la versión más reciente de React permitirá acceder a los campos de eventos cuando los necesite
. . . . . . .
React v17 puede que no sea una actualización repleta de funcionalidades que esperaban los desarrolladores de React. En cambio, es más una actualización tranquila. Entonces, si bien es posible que no obtengamos nuevos componentes o ganchos geniales, estas adiciones valdrán la pena en el futuro en actualizaciones posteriores. Puede probar React v17 ahora ejecutándolo npm install react@17.0.0-rc.0 react-dom@17.0.0-rc.0 en su proyecto React.