Volver a la página principal
lunes 30 septiembre 2024
8

Cómo optimizar el rendimiento con useMemo en React

El hook useMemo en React se utiliza para memorizar el resultado de funciones costosas y evitar cálculos innecesarios en cada renderizado. Sirve para optimizar el rendimiento de componentes que realizan operaciones complejas o que dependen de valores que cambian con poca frecuencia. useMemo solo recalculará el valor cuando las dependencias indicadas cambien, permitiendo que React reutilice el resultado almacenado en lugar de volver a ejecutar la función.

¿Qué es useMemo y cómo funciona?

useMemo toma dos argumentos principales: una función de cálculo y un array de dependencias. La sintaxis es la siguiente:

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
  • Función de cálculo: Esta función retorna el valor que deseas memorizar.
  • Dependencias: Array de valores que, cuando cambian, provocan que useMemo recalcule el valor.

Cuándo usar useMemo

Se debe utilizar useMemo cuando:

1. Existen operaciones de cálculo pesadas o funciones que toman tiempo en completarse.

2. El componente depende de objetos o arrays creados dinámicamente, que pueden causar renderizados innecesarios.

Ejemplo básico de useMemo

import React, { useState, useMemo } from 'react';

function ExpensiveCalculationComponent() {
  const [count, setCount] = useState(0);
  const [input, setInput] = useState("");

  // Función que simula una operación costosa
  const expensiveCalculation = (num) => {
    console.log("Realizando cálculo costoso...");
    for (let i = 0; i < 1000000000; i++) {
      num += 1;
    }
    return num;
  };

  // Memorizar el resultado de la operación costosa
  const memoizedValue = useMemo(() => expensiveCalculation(count), [count]);

  return (
    <div>
      <h1>Resultado del cálculo: {memoizedValue}</h1>
      <button onClick={() => setCount(count + 1)}>Incrementar</button>
      <input
        type="text"
        value={input}
        onChange={(e) => setInput(e.target.value)}
        placeholder="Escribe algo..."
      />
    </div>
  );
}

export default ExpensiveCalculationComponent;

En este ejemplo, la función expensiveCalculation solo se ejecutará de nuevo cuando cambie el valor de count, gracias a useMemo. Cualquier cambio en el input no activará un nuevo cálculo.

¿Cuándo no usar useMemo?

Aunque useMemo ayuda a optimizar el rendimiento, no debe usarse en todos los casos. No aporta beneficios si el cálculo es sencillo o si no se tienen problemas de rendimiento. Un uso excesivo puede hacer que el código sea más difícil de leer y mantener.

Referencia oficial

Para más información sobre useMemo, consulta la documentación oficial de React.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer