Mitos y Leyendas de React

Rate this content
Bookmark

Las charlas exploran varios patrones y conceptos engañosos en React, que parecen ser "conocimiento común", pero que muchos (si no la mayoría) de los desarrolladores suelen equivocarse o simplemente no son conscientes de ellos. Algunos ejemplos, cubiertos en la charla (y más):
* que "un componente de React se vuelve a renderizar cuando sus props cambian" (esto no es cierto)
* que envolver un componente en React.memo evitará su re-renderizado (no siempre es cierto)
* que el uso de Context causa re-renderizados y es malo para el rendimiento (no siempre es cierto, a veces Context puede reducir el número de re-renderizados en la aplicación)
* que crear un elemento como este `const A = <Child />` es cuando se activa el ciclo de vida de renderizado de Child (no es cierto)

FAQ

La autora trabajó durante cinco años en Atlassian, específicamente en el desarrollo del producto Jira.

La autora se mudó de Australia a Austria porque encontró más fácil escribir 'Austria' y estaba buscando un cambio de ambiente, alejándose del clima agradable y las playas perfectas de Australia.

Actualmente, la autora está interesada en el rendimiento de React, especialmente en cómo gestionar y optimizar las re-renderizaciones en las aplicaciones.

Una re-renderización innecesaria en React ocurre cuando componentes de la aplicación se actualizan sin necesidad, lo cual puede hacer que la aplicación se vuelva lenta y tenga retrasos. La autora busca eliminar este tipo de re-renderizaciones para mejorar el rendimiento.

Un mito común es que los componentes en React solo se re-renderizan debido a cambios en sus props, lo cual no es cierto. Las re-renderizaciones son más a menudo iniciadas por cambios en el estado del componente.

El contexto puede ser útil para evitar re-renderizaciones innecesarias al permitir que solo los componentes específicos que necesitan datos se actualicen, en lugar de propagar la actualización a través de todo el árbol de componentes.

Usar el índice de un array como clave es una mala práctica porque puede llevar a re-renderizaciones ineficientes y errores, especialmente en listas dinámicas donde los ítems pueden cambiar de posición, lo que confunde a React sobre qué ítems han cambiado realmente.

Nadia Makarevich
Nadia Makarevich
22 min
06 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla discute mitos y conceptos erróneos en React que pueden afectar los re-renderizados. Cubre re-renderizados innecesarios y la idea equivocada de que las props desencadenan re-renderizados. La charla también explora el papel de la memorización y el contexto en la reducción de re-renderizados. Además, destaca la importancia de utilizar correctamente el atributo key para optimizar el renderizado. La charla concluye discutiendo la separación de estado y API en el contexto y el uso de herramientas de gestión de estado como Redux.

Available in English: React Myths And Legends

1. Introducción a los mitos y leyendas en React

Short description:

Bienvenidos a la charla sobre mitos y leyendas en React. Mi nombre es Nadia y he sido desarrolladora por mucho tiempo. Hoy quiero compartir algunos mitos y conceptos erróneos que pueden afectar negativamente las re-renders en todas las aplicaciones. Pero antes, recordemos rápidamente qué es el montaje, las re-renders y las re-renders innecesarias en React.

Trabajé en Atlassian durante aproximadamente cinco años en un producto que algunos de ustedes pueden conocer y amar llamado Jira. Hasta hace muy poco, vivía en Australia rodeada de loros y canguros. Pero hace unos meses, me cansé de este clima agradable y playas perfectas y me mudé a Austria por la única razón de que soy perezosa y Austria es más fácil de escribir.

También soy un poco nerd. Uno de mis pasatiempos nerds es investigar cómo funcionan las cosas en detalle y luego escribir artículos de deep dive sobre esos temas. Normalmente escribo para desarrolladores front-end, más específicamente para desarrolladores de React. Uno de los principales enfoques de esas investigaciones, lo que más me interesa últimamente es el rendimiento de React. Y el tema del rendimiento en React es increíblemente interesante. React es una herramienta fantástica que nos permite escribir aplicaciones complicadas de manera fácil y rápida. Pero como resultado, también es muy fácil escribir código que haga que nuestras aplicaciones sean muy lentas y tengan retrasos. Y la mayoría de las veces, esto se debe a las re-renders. Ya sea que volvamos a renderizar demasiado rápido, demasiado a menudo o componentes demasiado pesados. Por lo tanto, la clave para un buen rendimiento en React es saber y poder controlar cuándo se montan y se vuelven a renderizar los componentes. Y luego evitar los que son innecesarios.

Así que hoy quiero compartir algunos mitos y conceptos erróneos que son bastante comunes entre los desarrolladores y que pueden afectar negativamente la situación de las re-renders en todas las aplicaciones. Pero antes de hacer eso, recordemos rápidamente qué es el montaje, las re-renders y qué son las re-renders innecesarias. Todo comienza con el montaje. Esta es la primera vez que el componente aparece en la pantalla. En este momento, React inicializa y conecta todo, por lo tanto, la renderización inicial dispara todas las devoluciones de llamada y los efectos de uso por primera vez. Después de eso, si su aplicación es interactiva, llegará el momento de las re-renders. La re-renderización es cuando React actualiza un componente que ya existe con algunos nuevos datos. Esto suele ocurrir como resultado de la interacción del usuario con su interfaz o algunos datos externos que llegan. Las re-renders son una parte crucial del ciclo de vida de React. Sin ellas, no habrá actualizaciones en la interfaz y, como resultado, no habrá interactividad. Por lo tanto, no es algo de lo que queramos deshacernos.

2. Unnecessary Re-renders and the Big Re-renders Myth

Short description:

Las re-renders innecesarias ocurren cuando toda la aplicación se vuelve a renderizar en cada pulsación de tecla, lo que afecta negativamente al rendimiento. El mito de las grandes re-renders afirma que un componente se vuelve a renderizar cuando cambian sus props, pero esto no es cierto. Las re-renders se desencadenan por cambios en el estado, que propagan las actualizaciones a otros componentes de forma recursiva.

Las re-renders innecesarias, sin embargo, son una historia completamente diferente. Imagina una aplicación React, solo un árbol de componentes como cualquier otra aplicación, y en algún lugar en la parte inferior de este árbol, tenemos un componente con un campo de entrada donde el usuario puede escribir algo. Cuando esto sucede, quiero actualizar el estado de esta entrada y todo lo relacionado con los datos del usuario, como mostrar algunas sugerencias útiles mientras el usuario está escribiendo. Esto es una re-renderización. Lo último que quiero, sin embargo, es que toda la aplicación se vuelva a renderizar en cada pulsación de tecla. Imagina lo lento que sería escribir en este campo si algo así sucediera. Definitivamente, esto no es algo que alguien llamaría una aplicación de rendimiento. Este es un ejemplo de re-renders innecesarias, y es exactamente el tipo de re-renders que queremos eliminar.

Y cuando se trata de prevenir las re-renders, hay un gran mito en el que todos creen. Lo llamo el mito de las grandes re-renders. Va así. Un componente se vuelve a renderizar cuando cambian sus props. Es increíble, de verdad. Todos lo creen. Nadie lo duda. Y simplemente no es cierto. Para entender eso, profundicemos un poco más en por qué ocurren las re-renders en primer lugar. Todo comienza con el cambio de estado. Cualquier desarrollador de React probablemente reconocerá el código. Tenemos un componente padre. Renderiza un componente hijo y tiene un hook useState. Cuando se activa setState, el componente padre completo se volverá a renderizar. El cambio de estado es la fuente inicial de todas las re-renders. Es el rey de las re-renders, por así decirlo. Por eso está en la corona. Después del cambio de estado, es el momento de que React propague esta actualización a otros componentes. React lo hace de forma recursiva. Toma los hijos directos de un componente con estado, los vuelve a renderizar, luego vuelve a renderizar los hijos, y así sucesivamente hasta que llega al final del árbol de componentes o se detiene explícitamente. Esta es la siguiente razón por la que un componente se vuelve a renderizar cuando su componente padre se vuelve a renderizar. Si observamos el código, una vez que ocurre el cambio de estado en el componente padre, todos los hijos que tiene este componente se volverán a renderizar como resultado.