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.

This talk has been presented at React Advanced Conference 2022, check out the latest edition of this React Conference.

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's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Entendiendo la Arquitectura Fiber de React
React Advanced Conference 2022React Advanced Conference 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
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
Top Content
React query version five is live and we'll be discussing the migration process to server components using Next.js and React Query. The process involves planning, preparing, and setting up server components, migrating pages, adding layouts, and moving components to the server. We'll also explore the benefits of server components such as reducing JavaScript shipping, enabling powerful caching, and leveraging the features of the app router. Additionally, we'll cover topics like handling authentication, rendering in server components, and the impact on server load and costs.
Componentes del Servidor: La Épica Historia de Renderizar UX
React Summit 2023React Summit 2023
26 min
Componentes del Servidor: La Épica Historia de Renderizar UX
Top Content
This Talk introduces server components in React, which provide an intermediate format for rendering and offer advantages for both client-side and server-side rendering. Server components reduce bundle size on the client and improve search engine optimization. They abstract the rendering process, allowing for faster rendering and flexibility in choosing where to render components. While server components are still in the experimental stage, Next.js is a good starting point to try them out.
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
This Talk explores the internals of React Fiber and its implications. It covers topics such as fibres and units of work, inspecting elements and parent matching, pattern matching and coroutines, and the influence of coroutines on concurrent React. The Talk also discusses effect handlers in React, handling side effects in components, and the history of effect handlers in React. It concludes by emphasizing the importance of understanding React internals and provides learning resources for further exploration.
Descifrando el Modo Concurrente
React Advanced Conference 2021React Advanced Conference 2021
30 min
Descifrando el Modo Concurrente
Sudhanshu Yadav discusses the incremental concurrent feature in React 18 and the need for concurrent mode to provide a better user experience. Time slicing is the key pattern enabling concurrent features. Background rendering and unit of work are used to achieve asynchronous rendering and eventual consistency. Concurrent mode introduces a new pattern called differing for immediate rendering and adjusting based on available resources. React provides APIs for deferred updates and transitions. Implementing concurrent mode APIs can be complex, but it offers benefits like avoiding update starvation and reusing work. Scheduling and slots are used to control execution and dynamic FPS control. Handling multiple transitions can be challenging, but the React 18 working group discussions provide insights into the team's efforts to improve the user experience.

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 />.