Manteniéndose seguro en un mundo concurrente

Rate this content
Bookmark

Con React 18, las esperadas características concurrentes ahora están disponibles para el público. Si bien técnicamente no introducen nuevas restricciones sobre cómo construimos nuestros componentes, hay muchos patrones que antes funcionaban pero que ahora podrían introducir errores sutiles en nuestras aplicaciones. Aprendamos nuevamente las reglas de React para poder mantenernos seguros en este nuevo mundo concurrente.

FAQ

React 18 ha introducido características concurrentes que permiten partes pequeñas de una aplicación a optar por un funcionamiento en modo concurrente, sin necesidad de que toda la aplicación esté preparada para este modo.

El modo concurrente en React implica que los desarrolladores deben asegurarse de que sus funciones de renderizado y componentes sean puros, sin leer valores del mundo exterior ni modificarlo, para evitar inconsistencias en el estado de la UI.

Se eliminaron métodos como `componentWillMount`, `componentWillReceiveProps` y `componentWillUpdate`, o se reemplazaron por variantes inseguras para indicar que estos métodos no son seguros de usar con las características concurrentes.

Asegurar que las funciones sean puras es crucial para mantener la consistencia de la UI, ya que React se basa en la premisa de que la misma entrada siempre debe producir la misma salida, sin efectos secundarios ni mutaciones externas.

El modo concurrente permite que el proceso de renderizado sea interrumpible, lo que significa que React puede pausar y reanudar la renderización según sea necesario para manejar interacciones del usuario, mejorando la responsividad sin bloquear el hilo principal.

Un desgarro ocurre cuando diferentes partes de la aplicación muestran estados diferentes debido a lecturas de valores externos que cambian. Para evitarlo, es necesario evitar leer valores que podrían cambiar fuera del mundo de React, como variables globales o almacenamiento local que no está gestionado por React.

El gancho useSyncExternalStore permite sincronizar valores de fuentes externas de manera segura con el mundo de React, asegurando que los componentes reciban actualizaciones sin causar problemas de desgarro o inconsistencias en la UI.

Andreas Roth
Andreas Roth
22 min
24 Oct, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla explora las implicaciones de las nuevas características concurrentes en React 18 y cómo afectan a los desarrolladores. Se discute la premisa fundamental de React y la importancia de los componentes de función pura. La charla también aborda conceptos erróneos sobre el proceso de renderizado de React y la prevención de desgarros en las aplicaciones. Además, se destacan las fases de reconciliación y confirmación en React y los desafíos de la gestión de dependencias en las bibliotecas de gestión de estado.

1. Introducción a las características concurrentes de React 18

Short description:

Esta charla explora las implicaciones de las nuevas características concurrentes en React 18 y cómo afectan a los desarrolladores. El orador, Andreas, comparte su experiencia como líder de desarrollo en una agencia de software y destaca la importancia de mantenerse seguros en un mundo concurrente.

Espero que estén teniendo una conferencia increíble hasta ahora. Tal vez incluso hayan escuchado un par de charlas mencionando las nuevas características concurrentes que se lanzaron en React 18 hace un par de meses. En esta charla, no vamos a entrar en detalles sobre cómo funcionan estas características y qué hacen, pero queremos analizar las implicaciones y ramificaciones que esas características tienen en nosotros como desarrolladores para poder mantenernos seguros en un mundo concurrente de React.

Antes de adentrarnos en eso, permítanme contarles un poco sobre mí. Mi nombre es Andreas y soy de Dresden, Alemania, donde soy líder de desarrollo en una pequeña agencia de software. Nuestro trabajo consiste en ir a otras empresas de desarrollo de software y ayudar a los equipos a acelerar sus proyectos de software. Lo hacemos utilizando tecnologías como TypeScript React. Así que esto es exactamente lo que hago todos los días.

En este trabajo, lo que nos dimos cuenta en los últimos meses es que hay mucho miedo, incertidumbre y duda debido al nuevo lanzamiento de React y las nuevas reglas y lo que hay que hacer para estar seguro en el modo concurrente en sus aplicaciones. Y por eso propuse esta charla, para que puedan relajarse y mantenerse seguros en un mundo concurrente.

2. Evolución de las técnicas de renderizado de React

Short description:

Abramov introdujo el renderizado asíncrono en 2018 para que React se adapte al dispositivo del usuario y garantice interacciones rápidas y receptivas. Desde entonces, la fecha de lanzamiento se retrasó y el nombre cambió a renderizado concurrente o modo concurrente. Con React 18, se introdujeron características concurrentes que permiten a los desarrolladores optar por partes específicas de su aplicación. Las reglas de React no han cambiado, pero ahora las estamos utilizando de manera más efectiva.

Cuando retrocedemos un par de años, hasta 2018, Abramov introdujo el renderizado asíncrono. Por lo tanto, React debería adaptarse al dispositivo del usuario, las interacciones rápidas deberían sentirse instantáneas y las interacciones lentas deberían sentirse receptivas. La técnica principal consistía en dividir el proceso de renderizado para poder pausar, reanudar, realizar diferentes actualizaciones, de modo que nuestra aplicación se mantenga rápida y receptiva, sin importar el dispositivo o las condiciones de la red.

Desde entonces, muchas cosas han cambiado. Por ejemplo, la fecha de lanzamiento se ha retrasado un poco y el nombre ha cambiado de renderizado asíncrono a renderizado concurrente o modo concurrente. Y luego, con React 18, el equipo tomó la increíble decisión de no introducir un modo concurrente que cambie toda su aplicación a este nuevo mundo concurrente, sino que introdujo características concurrentes para que pueda optar por partes pequeñas de su aplicación en las características concurrentes, de modo que no toda su aplicación tenga que estar lista para el modo concurrente, sino solo partes de su aplicación.

Incluso lanzaron una publicación en el blog en ese momento, donde realizaron ciertos cambios en la API de React para preparar este cambio para el futuro. Eliminaron los métodos `componentWillMount`, `componentWillReceiveProps` y `componentWillUpdate`, o los reemplazaron por variantes inseguras. Esto es para que ustedes, como desarrolladores, sepan que estos métodos no son realmente seguros de usar con características concurrentes, pero aún pueden estar en su código siempre y cuando no utilicen las características concurrentes. Podría decirse que las reglas de React han cambiado desde entonces. Pero no es cierto. Las reglas de React no han cambiado desde entonces. Este es el punto más importante de mi presentación. Las reglas de React no han cambiado. Solo ahora estamos comenzando a aprovechar realmente las mismas reglas que estuvieron presentes desde hace mucho tiempo.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
¡React 18! ¡Funciones concurrentes! Tal vez ya hayas probado las nuevas APIs como useTransition, o tal vez solo hayas oído hablar de ellas. Pero, ¿sabes cómo React 18 logra las mejoras de rendimiento que trae consigo? En esta charla, echemos un vistazo bajo el capó de las características de rendimiento de React 18: - Cómo React 18 reduce el tiempo que tu página permanece congelada (también conocido como TBT) - Qué sucede exactamente en el hilo principal cuando ejecutas useTransition() - Cuál es la trampa con las mejoras (¡no hay torta gratis!), y por qué Vue.js y Preact se negaron rotundamente a lanzar algo similar
Entendiendo la Arquitectura Fiber de React
React Advanced Conference 2022React Advanced Conference 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
Hemos escuchado mucho sobre la Arquitectura Fiber de React, pero parece que pocos de nosotros la entendemos en profundidad (o tenemos el tiempo para hacerlo). En esta charla, Tejas repasará su mejor intento de entender Fiber (revisado por otros expertos), y lo presentará de una manera 'explicar-como-si-tuviera-cinco años'.
Dentro de Fiber: la descripción general en profundidad que querías para TLDR
React Summit 2022React Summit 2022
27 min
Dentro de Fiber: la descripción general en profundidad que querías para TLDR
Quiero proporcionar una descripción general en profundidad de los conceptos importantes detrás de la reconciliación. Luego exploraremos cómo React utiliza el algoritmo y repasaremos algunas palabras mágicas que escuchamos mucho, como coroutines, continuations, fibers, generators, algebraic effects y veremos cómo se relacionan con React.js.
Componentes del Servidor: La Epopeya de la Representación UX
React Summit 2023React Summit 2023
26 min
Componentes del Servidor: La Epopeya de la Representación UX
Los componentes del servidor, introducidos en React v18, ponen fin a estas limitaciones, permitiendo representar completamente los componentes de React en el servidor, en un formato de abstracción intermedio sin necesidad de agregar al paquete de JavaScript.Esta charla tiene como objetivo cubrir los siguientes puntos:1. Una divertida historia de cómo necesitábamos CSR y cómo SSR comenzó a ocupar su lugar2. ¿Qué son los componentes del servidor y qué beneficios aportan, como un tamaño de paquete de JavaScript de 0?3. Demostración de una aplicación simple utilizando representación en el lado del cliente, SSR y componentes del servidor, y análisis de las mejoras de rendimiento y comprensión de cuándo usar cada enfoque4. Mi opinión sobre cómo cambiará la representación de la interfaz de usuario con este enfoque
Descifrando el Modo Concurrente
React Advanced Conference 2021React Advanced Conference 2021
30 min
Descifrando el Modo Concurrente
Con la llegada del modo concurrente en React 18, hablemos de las complejidades detrás de proporcionar APIs declarativas para el renderizado concurrente. Mientras implementaba las APIs del modo concurrente desde cero para Brahmos.js, me encontré con muchos casos de uso y variabilidad que lo convirtieron en uno de los problemas más interesantes de resolver, y aprecio aún más los esfuerzos de React en promover la UI Concurrente. En esta charla veremos qué significa el modo concurrente para una aplicación web, cuáles son las complejidades internas y cómo lo resolví para Brahmos.js.
Una Guía Práctica para Migrar a Componentes de Servidor
React Advanced Conference 2023React Advanced Conference 2023
28 min
Una Guía Práctica para Migrar a Componentes de Servidor
Los Componentes de Servidor son la nueva gran cosa, pero hasta ahora gran parte del discurso a su alrededor ha sido abstracto. Cambiemos eso. Esta charla se centrará en el lado práctico de las cosas, proporcionando un mapa de ruta para navegar el viaje de migración. Comenzando desde una aplicación que utiliza el antiguo enrutador de páginas de Next.js y React Query, desglosaremos este viaje en un conjunto de pasos accionables e incrementales, deteniéndonos solo cuando tengamos algo que se pueda enviar y que sea claramente superior a lo que comenzamos. También discutiremos los próximos pasos y estrategias para adoptar gradualmente más aspectos de este paradigma transformador.

Workshops on related topic

Aventuras de Renderizado Concurrente en React 18
React Advanced Conference 2021React Advanced Conference 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured WorkshopFree
Maurice de Beijer
Maurice de Beijer
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?

¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.

Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
Comenzando con Suspense y Renderizado Concurrente en React
React Summit 2020React Summit 2020
125 min
Comenzando con Suspense y Renderizado Concurrente en React
Featured Workshop
Maurice de Beijer
Maurice de Beijer
React sigue evolucionando y haciendo que las cosas difíciles sean más fáciles para el desarrollador promedio.
Un caso en el que React no era particularmente difícil pero muy repetitivo, es trabajar con solicitudes AJAX. Siempre hay una trinidad de estados de carga, éxito y posibles errores que deben manejarse cada vez. Pero ya no, ya que el componente `<Suspense />` facilita mucho la vida.
Otro caso es el rendimiento de aplicaciones más grandes y complejas. Por lo general, React es lo suficientemente rápido, pero con una aplicación grande, la renderización de componentes puede entrar en conflicto con las interacciones del usuario. El renderizado concurrente se encargará de esto, en su mayoría de forma automática.
Aprenderás todo sobre cómo usar <Suspense />, mostrar indicadores de carga y manejar errores. Verás lo fácil que es comenzar con el renderizado concurrente. Harás que el suspense sea aún más capaz combinándolo con el renderizado concurrente, el gancho `useTransition()` y el componente <SuspenseList />.