Chuck's Academy

React Básico

Optimización de Rendimiento en React

A medida que las aplicaciones React crecen en tamaño y complejidad, la optimización del rendimiento se vuelve una prioridad. React ofrece varias herramientas para minimizar los renders innecesarios, mejorar la eficiencia y mantener una interfaz de usuario fluida.

En este capítulo, exploraremos cómo usar React.memo, useMemo y useCallback para optimizar el rendimiento de las aplicaciones React.

Evitar Renders Innecesarios con React.memo

React.memo es una función de orden superior que puedes aplicar a un componente funcional para evitar que se vuelva a renderizar innecesariamente. React renderiza un componente cada vez que sus props cambian. Sin embargo, si las props no cambian, podemos usar React.memo para decirle a React que reutilice el resultado del renderizado anterior.

Ejemplo de React.memo

jsx
"En este codigo, envolvemos el componente Button con React.memo. Esto previene que el boton re-renderize salvo que sus props, onClick o label, cambien."

Aquí, el componente Button solo se renderiza si cambian sus props onClick o label. Si no hay cambios, React.memo reutiliza el componente renderizado anteriormente.

¿Cuándo usar React.memo?

Usa React.memo cuando el componente:

  • Es pesado en términos de renderizado.
  • No necesita actualizarse a menos que cambien sus props.
  • Está anidado en otros componentes que se renderizan frecuentemente.

Optimizar Cálculos Pesados con useMemo

useMemo es un hook que te permite memorizar el resultado de una función costosa o de un cálculo pesado. Solo recalculará el valor si cambian las dependencias especificadas.

Ejemplo de useMemo

jsx
"En este ejemplo usamos useMemo para calcular el valor basado en num. el calculo solo sucede cuando el prop num cambia, evitando calculos innecesarios."

En este ejemplo, la función dentro de useMemo solo se ejecuta cuando num cambia. Esto optimiza el rendimiento, evitando cálculos innecesarios en cada renderizado.

¿Cuándo usar useMemo?

Usa useMemo cuando:

  • Tienes cálculos costosos o pesados.
  • Quieres evitar que un valor se vuelva a calcular en cada renderizado.

Memorizar Funciones con useCallback

useCallback es un hook similar a useMemo, pero está diseñado específicamente para memorizar funciones. Cuando pasas funciones como props a otros componentes, React las vuelve a crear en cada renderizado. useCallback te permite evitar esta recreación constante.

Ejemplo de useCallback

jsx
"En este ejemplo usamos useCallback para memorizar la funcion increment. El ChildComponent recive esta función cómo un prop y solo va a re-renderizar la función si cambia."

Aquí, el componente ChildComponent solo se renderiza de nuevo si la función increment cambia, lo que previene renderizados innecesarios.

¿Cuándo usar useCallback?

Usa useCallback cuando:

  • Pasas funciones como props a componentes hijos.
  • Quieres evitar la recreación constante de funciones que no han cambiado.

Técnicas Adicionales de Optimización

Además de React.memo, useMemo, y useCallback, existen otras técnicas y herramientas que pueden ayudarte a optimizar tus aplicaciones React:

Carga Diferida (Lazy Loading)

React permite cargar componentes de manera diferida utilizando React.lazy y Suspense. Esto es útil para dividir el código y solo cargar las partes necesarias cuando el usuario las necesita.

jsx
"En este ejemplo usamos React.lazy para cargar LazyComponent solo cuando es necesitado. Cuando carga el fallback UI muestra un mensaje de carga."

Esto mejora el rendimiento al reducir el tamaño inicial del paquete que se carga en la aplicación.

Optimización del Renderizado con Fragmentos

Usa React.Fragment para agrupar múltiples elementos sin agregar nodos adicionales al DOM. Esto reduce la sobrecarga del DOM al mantener una estructura más limpia.

jsx
"Aqui usamos React.Fragment para retornar elementos multiples sin agregar nodos extra al DOM."

Conclusión

Optimizar el rendimiento en React es crucial para aplicaciones de gran escala. Herramientas como React.memo, useMemo, y useCallback ayudan a evitar renders innecesarios y cálculos pesados. Junto con otras técnicas como la carga diferida, puedes asegurarte de que tu aplicación React siga siendo rápida y eficiente.


Pregúntame lo que sea