What Refs Can Do for You

Rate this content
Bookmark

Aunque los Refs se consideran una vía de escape, hay momentos en los que simplemente podrías necesitar usarlos. En esta charla, con la ayuda de ejemplos del mundo real, veremos qué pueden hacer los Refs por nosotros en términos de claridad de código y también de mejoras en el rendimiento. Piensa en minimizar renders y evitar interfaces de usuario parpadeantes. Cubriremos las restricciones para un uso seguro y, para aquellos de ustedes que ya están utilizando estos patrones, asegúrense de estar preparados para los cambios que vienen en React 19.

This talk has been presented at React Summit US 2024, check out the latest edition of this React Conference.

Stephen Cooper
Stephen Cooper
27 min
19 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy se centró en el uso de refs y el perfilado de Agigrid en React. El orador compartió su experiencia en la optimización de componentes de celda personalizados y el rendimiento, incluyendo el uso de memo y aprovechando el compilador de React. También discutieron la mejora del rendimiento con actualizaciones de estilo manuales y la refactorización del uso de useEffect. El orador destacó el uso de ref callbacks, que se pueden implementar con useLayoutEffect. React 19 introduce cambios en el enfoque de ref callback. La charla tocó el uso de React DevTools y variables CSS para monitorear renders. También se discutió la compatibilidad de Azure Grid con React y las compensaciones entre el uso de componentes de React y JavaScript puro. El orador enfatizó la importancia de considerar las mejoras de DX y la complejidad de no ver un árbol de componentes de React en las herramientas de desarrollo. La charla concluyó con una mención de las características de AG Grid, el manejo de refs en varios niveles y la recomendación de consultar con Stephen para preguntas técnicas y arquitectura de aplicaciones.
Available in English: What Refs Can Do for You

1. Introduction to Refs and Profiling Agigrid

Short description:

Hoy, quiero hablarles sobre lo que los refs pueden hacer por ustedes. Compartiré algunas cosas que he aprendido mientras perfilaba Agigrid, centrándome en diferentes partes de React. Notamos un problema de redimensionamiento brusco con un componente personalizado, así que investigamos y grabamos el perfil. Aunque hubo muchas renderizaciones, fueron rápidas, así que es algo a considerar.

Hoy, quiero hablarles sobre lo que los refs pueden hacer por ustedes. Como ya han tenido algunos adelantos y aquí hay más información sobre, ya saben, yo. Así que hay 10 años en la industria financiera y ahora tres años con Agigrid. Y tuve que añadir esto a mi diapositiva, ya saben, fotos de las mascotas, ya que todos van a enterarse de ellas. Así que son Toby, Rufus y Coco. Así que sí, la vida está ocupada en casa. Pero esa es mi vida personal.

En un entorno profesional, trabajo en Agigrid. Así que todos han escuchado los anuncios hoy, tenemos Agigrid y los AgiCharts. Así que pueden incorporar estos componentes en su aplicación, comenzar a usarlos y tener todas estas grandes características. Pero no se preocupen, eso no es en lo que me voy a centrar hoy. Voy a compartir algunas de las cosas que he aprendido mientras perfilaba Agigrid. Y estas son cosas que creo que a medida que avanzamos en este viaje juntos, caminamos a través de los problemas, deberíamos aprender algo sobre estas diferentes partes de React, o al menos ese es mi objetivo.

Así que comencemos aquí. Así que mientras desarrollábamos Agigrid, estábamos ejecutando estos diferentes casos de uso. Y uno de ellos fue, bueno, un usuario viene a nosotros y dice, tengo este componente personalizado que voy a poner en una de estas columnas. Así que en este caso, es como un ticker con una imagen de la empresa. Y van a redimensionarlo. Y lo que notamos en estas pruebas es que, bueno, en realidad, el redimensionamiento era realmente brusco. Y ellos dicen, esta es una experiencia de usuario terrible. Así que es como, OK, ¿qué vamos a hacer al respecto? Vamos a investigar.

Así que antes de saltar al caso complicado de esta situación, demos un paso atrás y veamos, ¿podemos realmente reproducir esto en un caso más simple y ver si hay algún problema de rendimiento allí? Así que abrimos React DevTools. Quité todos los renderizadores de celdas personalizados. Así que aquí solo estamos renderizando celdas de texto plano, movimos la columna y grabamos el perfil. Y esto es lo que vimos. Así que no estamos viendo ningún problema de rendimiento percibido en esta situación. Pero lo que pueden ver es que tenemos 254 renderizaciones solo por hacer algunos de estos redimensionamientos. Pero son renderizaciones rápidas. Así que en realidad no tenemos automáticamente un problema aquí porque tenemos muchas renderizaciones. Pero es algo que tal vez necesitemos considerar.

Read also

2. Optimizing Custom Cell Components and Performance

Short description:

Grabar que el componente Y se vuelve a renderizar y analizar los nombres de los hooks puede facilitar la depuración. Cuando simulamos componentes de celda personalizados proporcionados por el usuario con lógica lenta, el rendimiento de la cuadrícula se ve afectado. La celda del ticker se convierte en un cuello de botella, haciendo que el navegador se quede atascado en re-renderizaciones. Al usar memo y aprovechar el compilador de React, podemos mejorar el rendimiento.

Y mientras miramos el perfil, estas son dos configuraciones que creo que son muy, muy importantes. Así que grabar que el componente Y se vuelve a renderizar. Así que esto te está diciendo, bueno, es el componente de celda, y fue el hook 30 el que cambió. Y luego hay otra configuración en el panel de componentes donde puede analizar los nombres de los hooks. Así que en lugar de tener este indefinido falso, falso, falso, en realidad te da los nombres que usaste en tu código. Así que estas son solo pequeñas cosas que pueden hacer que la depuración de estos problemas sea mucho más fácil.

Como dije, realmente no vimos este problema de rendimiento en el caso simple. Así que ahora ponemos un componente de celda personalizado, y lo hacemos artificialmente lento. Así que pondremos algo de lógica lenta allí, tal vez como un bucle for, que hace mucho trabajo, antes de renderizar las cosas. Así que estas son solo una idea de simular lo que un usuario podría proporcionarnos. Porque no estamos en control de lo que el usuario nos va a dar. Pero necesitamos asegurarnos de que la cuadrícula aún funcione bien en esas situaciones.

Así que cuando hicimos esto, lo pusimos en la cuadrícula, pudimos ver que teníamos este comportamiento lento nuevamente. Y esta vez en el perfil, se ve bastante diferente. Solo hemos logrado renderizarlo 10 veces. Así que esta es la razón por la que en lugar de tener muchas, muchas, muchas renderizaciones diferentes, y obtienes ese redimensionamiento suave, en su lugar tenemos esto, ya sabes, el navegador se queda atascado, se vuelve a renderizar. El navegador se queda atascado, se vuelve a renderizar. Así que puedes ver esto con las barras mucho más altas y el tiempo que estaban tomando. Y también podemos ver bastante claramente que es esta celda del ticker que hemos proporcionado, que es el cuello de botella, y que está bloqueando el navegador.

Así que si miramos rápidamente esto y decimos, bueno, ¿por qué se está renderizando tanto este componente? Ahora, en nuestro componente de celda, estábamos configurando el estilo a través de la propiedad de estado, digamos que tenemos left aquí. Así que nuestro controlador de celdas, que es lo que controla dónde están todas estas columnas, estaba diciendo, bueno, la posición izquierda está cambiando. Y eso es lo que esperarías. Y simplemente actualizaríamos el estado. Pero debido a que estamos actualizando el estado, React está volviendo a renderizar todo este componente. Y debido a que el estado se está actualizando en ese div, la celda personalizada es un hijo de eso. Y así, si no hay memorización o algún tipo de cachés allí, eso también se está volviendo a renderizar. Así que el primer paso es, bueno, podemos envolverlo y usar memo, o memo. Y luego también esto es algo de lo que el compilador de React se encargará por nosotros. Así que no voy a pasar mucho tiempo hablando de eso. Eso nos ayuda a mejorar el rendimiento.

QnA

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

Compilador React Forget - Entendiendo React Idiomático
React Advanced 2023React Advanced 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Todo lo que necesitas saber sobre React 19
React Summit US 2024React Summit US 2024
29 min
Todo lo que necesitas saber sobre React 19
React 19 introduces new features such as React Compiler and React Actions, which optimize code and provide better performance. The useOptimistic hook allows for optimistically updating UI, while the UseFormStatus hook tracks loading states and enables button disabling. The introduction of the 'action' attribute simplifies form handling and data retrieval. React 19 eliminates the need for useMemo and useCallback thanks to the React Compiler. The stability of React 19 has been observed in side projects without major issues.
Guía para Desarrolladores de Aplicaciones sobre React 19: Lo que Necesitas Saber y Todo lo que Puedes Ignorar con Seguridad
React Summit US 2024React Summit US 2024
33 min
Guía para Desarrolladores de Aplicaciones sobre React 19: Lo que Necesitas Saber y Todo lo que Puedes Ignorar con Seguridad
Today's Talk focused on React 19 and its features, APIs, changes, and optimizations. The speaker emphasized the importance of migrating apps and building with React 19. They discussed the high-level features of React 19, including TypeScript emphasis and the testing library philosophy. The Talk also covered the APIs and integration of React 19, as well as the changes and type safety it brings. The speaker highlighted the improvements in useReducer types and the use of TypeScript. They introduced useActionState for migrating code and the useOptimistic hook for maintaining state immediacy. Real-time updates, action functions outside components, and the benefits of using the 'use' prefix in React were also discussed. The Talk touched on upgrade considerations, the role of RSEs and server actions in React, and the current state of RSC development. Overall, the Talk provided valuable insights into the new features and enhancements in React 19 and their impact on the development process.
React Compiler - La Pieza que Falta para Optimizar Aplicaciones React
React Day Berlin 2024React Day Berlin 2024
30 min
React Compiler - La Pieza que Falta para Optimizar Aplicaciones React
Today's Talk introduces the React compiler and its optimizations in React 19. The compiler handles optimizations internally, allowing existing optimizations to coexist. React 19 also brings server components, enhanced hooks, improved reference handling, and asset loading optimization. The React compiler follows the same principles as a typical compiler, with a Babel plugin and ESLint plugin identifying optimizations. The compiler optimizes components by performing in-place updates and reducing unnecessary re-rendering. The React compiler playground helps understand the optimization process. Caching JSX and configuring the React compiler can further optimize specific components. The React compiler is compatible with React 18 and 17 with some configuration, but using React 19 is recommended. Connect with the speaker for more information and subscribe to their YouTube channel. Thank you for watching!
React 19 y el compilador para el resto de nosotros
React Day Berlin 2024React Day Berlin 2024
30 min
React 19 y el compilador para el resto de nosotros
Hi everyone. I'm Johnny, an application engineer who builds user-centric React 19 applications. Today, our goal is to help you reach production mountain with React 19. Let's start by gathering a crew and discussing the motives for installing the compiler. We'll revisit React rules and explore the compiler's impact on code. The React compiler translates from JavaScript to JavaScript and provides error reporting. It enables deeper levels of optimization and focuses on user experience. To upgrade to React 19, install the latest version and be aware of any compatibility issues. Check if any custom runtime code needs to be disabled. The React compiler can be used with versions 17 or 18 if you have runtime support. The compiler removes use memos and optimizes the initialization process based on static components. It provides granular reactivity and reduces rendering, making the application feel quicker. Follow React rules and conventions to ensure compatibility. Test custom hooks, be aware of the impact on build time, and address any unexpected issues like the removal of the global JSX namespace. Debugging tools and source mapping in Chrome are useful for understanding compiler output. Enjoy translating chants and exploring the possibilities of React 19!

Workshops on related topic

Dominando React Server Components y Server Actions en React 19
React Advanced 2024React Advanced 2024
160 min
Dominando React Server Components y Server Actions en React 19
Workshop
Maurice de Beijer
Maurice de Beijer
¡Llamando a todos los desarrolladores de React! Únete a nosotros para una inmersiva masterclass de 4 horas profundizando en React Server Components y Server Actions. Descubre cómo estas tecnologías revolucionarias están transformando el desarrollo web y aprende a aprovechar su máximo potencial para construir aplicaciones rápidas y eficientes.
Explora el mundo de React Server Components, combinando sin problemas el renderizado del lado del servidor con la interactividad del lado del cliente para un rendimiento y experiencia de usuario incomparables. Sumérgete en React Server Actions para ver cómo combinan la interactividad del lado del cliente con la lógica del lado del servidor, facilitando el desarrollo de aplicaciones interactivas sin las limitaciones tradicionales de API.
Obtén experiencia práctica con ejercicios prácticos, ejemplos del mundo real y orientación experta sobre la implementación de estas tecnologías en tus proyectos. Aprende temas esenciales como las diferencias entre Server y Client Components, optimización de la obtención de datos, pasando datos de manera efectiva y maximizando el rendimiento con nuevos hooks de React como useActionState, useFormStatus y useOptimistic.
Ya sea que seas nuevo en React o un profesional experimentado, esta masterclass te equipará con el conocimiento y las herramientas para elevar tus habilidades de desarrollo web. Mantente a la vanguardia y domina la tecnología de vanguardia de React 19. No te lo pierdas: regístrate ahora y desata todo el poder de React!
Evolución de la Gestión de Formularios en React
React Summit US 2024React Summit US 2024
72 min
Evolución de la Gestión de Formularios en React
Workshop
Adrian Hajdin
Adrian Hajdin
Aprende cómo manejar formularios en React utilizando las últimas características, como startTransition, useTransition, useOptimistic y useActionState, con y sin acciones del servidor de React 19, junto con la validación adecuada, manejo de errores y mejores prácticas.La masterclass comenzará demostrando el manejo tradicional de formularios usando useState y useEffect para el renderizado del lado del cliente. Gradualmente, pasaremos a utilizar las últimas características de React 19, incluyendo formularios del lado del servidor y los hooks más recientes para gestionar estados y errores de formularios. Al final de la masterclass, los participantes entenderán cómo crear formularios robustos con validación adecuada y manejo de errores.Objetivos de AprendizajeÚltimos Hooks de React 19 — useTransition, useFormStatus, useOptimistic, useActionState, useDeferredValueAcciones del ServidorRevalidacionesValidación del lado del ServidorManejo de ErroresPrácticas de Seguridad