馃摑 useMemo: optimizaci贸n de c谩lculos en componentes React

useMemo en React - optimizaci贸n de c谩lculos

馃摑 useMemo en React: optimizaci贸n de c谩lculos en componentes

El Hook useMemo permite memorizar el resultado de c谩lculos costosos en React, evitando que se recalculen en cada renderizado si sus dependencias no han cambiado. Esto mejora el rendimiento en componentes que realizan operaciones complejas.


1️⃣ Sintaxis b谩sica de useMemo

const valorMemorizado = useMemo(() => {
  // c谩lculo costoso
  return resultado;
}, [dependencias]);
  

Donde dependencias son los valores que, al cambiar, har谩n que el c谩lculo se vuelva a ejecutar.


2️⃣ Ejemplo pr谩ctico: c谩lculo de factorial

import { useState, useMemo } from "react";

function Factorial() {
  const [numero, setNumero] = useState(5);
  const [contador, setContador] = useState(0);

  const factorial = useMemo(() => {
    console.log("Calculando factorial...");
    const calcular = n => (n <= 1 ? 1 : n * calcular(n - 1));
    return calcular(numero);
  }, [numero]);

  return (
    <div>
      <h2>Factorial de {numero}: {factorial}</h2>
      <input type="number" value={numero} onChange={e => setNumero(parseInt(e.target.value))} />
      <button onClick={() => setContador(c => c + 1)>Incrementar contador ({contador})</button>
    </div>
  );
}

export default Factorial;

Ejemplo visual de useMemo

Factorial: 120


3️⃣ Cu谩ndo usar useMemo

  • ⚡ Para c谩lculos pesados que dependen de valores espec铆ficos.
  • 馃 Para evitar recomputaciones innecesarias en renderizados frecuentes.
  • 馃摝 脷til en listas grandes, filtrados, b煤squedas o c谩lculos matem谩ticos complejos.

4️⃣ Ejemplo avanzado: lista filtrada memorizada

import { useState, useMemo } from "react";

function ListaFiltrada({ items }) {
  const [filtro, setFiltro] = useState("");

  const itemsFiltrados = useMemo(() => {
    console.log("Filtrando lista...");
    return items.filter(item => item.toLowerCase().includes(filtro.toLowerCase()));
  }, [items, filtro]);

  return (
    <div>
      <input type="text" value={filtro} onChange={e => setFiltro(e.target.value)} placeholder="Buscar..." />
      <ul>
        {itemsFiltrados.map((item, index) => <li key={index}>{item}</li>)}
      </ul>
    </div>
  );
}

export default ListaFiltrada;
  

5️⃣ Resumen

  • 馃摑 useMemo memoriza resultados de c谩lculos costosos.
  • ⚡ Mejora el rendimiento evitando recomputaciones innecesarias.
  • ✅ Ideal para listas grandes, filtrados y operaciones pesadas dentro de componentes.

Publicar un comentario

0 Comentarios