¿Qué hace el hook 'useMemo' en React?

Uso de useMemo en React

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.

¿Cómo funciona useMemo?

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.

Aplicaciones prácticas de useMemo

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.

Buenas prácticas

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.

¿Te resulta útil?