React Memo: Boosting React Performance con una memoización simple
Las aplicaciones reaccionadas a menudo se ocupan de grandes conjuntos de datos y componentes complejos, donde los re-renderizadores innecesarios pueden afectar significativamente el rendimiento. Para abordar esto, React ofrece React. Memo, una herramienta simple pero poderosa para optimizar los componentes y reducir los tiempos de renderizado. En esta guía, exploraremos cómo funciona React Memo, por qué es útil y cómo implementarlo paso a paso.
react.memo es un componente de orden superior (hoc) en React que ayuda a no memorarse componentes funcionales. La memoización es el proceso de almacenamiento en caché de la salida de una función basada en sus entradas, por lo que la función no tiene que recomputar el resultado para las mismas entradas. React Memo funciona de manera similar: "recuerda" la última salida renderizada de un componente y solo lo reorganiza cuando sus accesorios cambian.
En React, los componentes vuelven a renderizar cada vez que sus componentes principales se vuelven a renderizar. Esto puede causar ineficiencias si la salida de un componente no depende de los cambios en su padre. Por ejemplo, en UI complejas con muchos componentes, puede ver el retraso debido a los re-renderizadores excesivos. El uso de React Memo puede optimizar esto solo actualizando los componentes cuando sea necesario.
Cuando un componente principal se vuelve a renderizar, sus componentes infantiles también se vuelven a renderizar. Esto puede conducir a cuellos de botella de rendimiento, especialmente cuando los componentes muestran datos estáticos o confiar en accesorios sin cambios.
Las aplicaciones con componentes profundamente anidados pueden enfrentar un rendimiento lento debido a los re-renderizadores acumulativos. La memoización, con React Memo, ayuda a prevenir los re-renderizadores de componentes que no requieren actualizaciones, mejorando la capacidad de respuesta de la aplicación.
Pasemos por una implementación básica de React Memo. Comenzaremos con un componente simple que no use memoización y veremos cómo Agregar memo React hace una diferencia.
import React, { useState } from 'react'; function Counter({ count }) { console.log('Counter component re-rendered'); returnCount: {count}
; } function App() { const [count, setCount] = useState(0); const [text, setText] = useState(''); return (); } export default App;setText(e.target.value)} placeholder="Type something..." />
En este ejemplo, cada vez que escribe el campo de entrada, el contador de componentes se vuelve a renderizar, a pesar de que el valor de conteo sigue siendo el mismo. Este es un volver a renderizar innecesario que podemos prevenir con React Memo.
ahora, envolvemos el componente de contador con react.memo para optimizarlo.
import React, { useState } from 'react'; const Counter = React.memo(function Counter({ count }) { console.log('Counter component re-rendered'); returnCount: {count}
; }); function App() { const [count, setCount] = useState(0); const [text, setText] = useState(''); return (); } export default App;setText(e.target.value)} placeholder="Type something..." />
con React.Memo, el contador del componente solo se vuelve a renderizar si su conteo cambia el apoyo. Ahora, escribir en el campo de entrada ya no desencadena un reiniciado del contador, optimizando significativamente el rendimiento.
vamos a sumergirnos en un ejemplo más complejo para ver los beneficios reales de React Memo. Supongamos que tenemos una lista de elementos con un botón "similar" al lado de cada elemento. Demostraremos cómo React Memo puede evitar re-renderizadores excesivos al gustarles elementos individuales.
import React, { useState } from 'react'; function Item({ item, onLike }) { console.log(`Rendering ${item.name}`); return (); } function ItemList() { const [items, setItems] = useState([ { id: 1, name: 'Item 1', likes: 0 }, { id: 2, name: 'Item 2', likes: 0 }, { id: 3, name: 'Item 3', likes: 0 }, ]); const handleLike = (id) => { setItems((prevItems) => prevItems.map((item) => item.id === id ? { ...item, likes: item.likes 1 } : item ) ); }; return ({item.name}
{items.map((item) => (); } export default ItemList;- ))}
En el código anterior, cuando le gusta un elemento, todos los elementos vuelven a renderizar, aunque solo a un elemento le gusta el cambio.
const Item = React.memo(function Item({ item, onLike }) { console.log(`Rendering ${item.name}`); return (); });{item.name}
ahora, solo el elemento que hace clic para que le guste volverá a renderizar, haciendo que la UI sea mucho más rápida y más eficiente.
React Memo es útil en escenarios específicos, pero usarlo en todas partes puede complicar su código sin agregar un beneficio real. Aquí hay algunas situaciones clave en las que puede ser particularmente efectivo:
comparación Shallow : React Memo hace una comparación superficial, lo que significa que no detectará cambios en objetos o matrices profundamente anidados. Considere usar usememo o usecallback si está pasando accesorios complejos.
Monitoreo de rendimiento : use React DevTools para identificar qué componentes realmente se benefician de la memoización. Memo react en exceso puede conducir a la complejidad del código con ganancias de rendimiento insignificantes.
No, React Memo es solo para componentes funcionales. Sin embargo, para los componentes de clase, se puede lograr un comportamiento similar con Purecomponent.
React Memo es una herramienta valiosa para reducir los re-renderizadores innecesarios y aumentar el rendimiento de la aplicación React. Al usarlo selectivamente en componentes funcionales puros o elementos de UI estáticos, puede optimizar su aplicación React sin complicar su estructura. ¡Siga estos pasos, pruebe los ejemplos y siga experimentando para encontrar las mejores estrategias de memorización para su proyecto!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3