useMemo
es uno de los hooks proporcionados por React. Este permite memorizar un valor calculado, que es útil para optimizar la eficiencia de las aplicaciones de React al evitar el cálculo repetitivo de valores costosos.
useMemo
acepta dos argumentos: una función y una lista de dependencias. La función proporcionada se invoca y su resultado se guarda para una eventual reutilización. Si las dependencias no cambian entre renderizados, React reutiliza el valor calculado anteriormente en lugar de invocar la función de nuevo.
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
En el ejemplo anterior, computeExpensiveValue
se invoca con los argumentos a
y b
. El resultado se memoriza y solamente se vuelve a calcular si a
o b
cambian entre renderizados. Si las dependencias permanecen igual, React simplemente utiliza el valor calculado anteriormente.
Vamos a considerar un componente que realiza una búsqueda en una lista de elementos. La búsqueda puede ser una operación costosa si la lista es grande. Para mejorar el rendimiento, podemos usar useMemo
para memorizar los resultados de la búsqueda.
function Search({ list, query }) {
const results = useMemo(
() => list.filter(item => item.includes(query)),
[list, query]
);
// render the results
}
En este caso, los resultados de la búsqueda solamente se recalculan si list
o query
cambian. Si estos permanecen igual, React reutiliza los resultados de la búsqueda anterior.
Aunque useMemo
puede mejorar el rendimiento, su uso innecesario o incorrecto puede causar problemas. Algunas buenas prácticas son:
Evita el uso de useMemo
para cálculos sencillos o pequeñas cantidades de datos. En estos casos, los costos del uso de useMemo (como la gestión de la memoria) pueden superar los beneficios.
Asegúrate de que las dependencias proporcionadas a useMemo
están completas. Si una dependencia falta, el valor memorizado puede quedar desactualizado.
No dependas del comportamiento de memorización para la semántica del programa. React puede optar por "olvidar" algunos valores en ciertas condiciones para liberar memoria, por lo que el comportamiento de memorización no siempre está garantizado.
En resumen, useMemo
es una herramienta útil para optimizar el rendimiento de las aplicaciones de React, pero debe usarse de manera adecuada para obtener los mejores resultados.