Saltar al contenido

Lección 9 de 12 · Lectura y práctica

React.memo y useMemo: Evitando Renderizados Innecesarios

React.memo y useMemo: evitando renderizados innecesarios La optimización en React no consiste en envolver todo con memoización. Consiste en medir, encontrar renders costosos y aplicar la herramienta correcta cuando hay un.

Del concepto a la práctica

Taller de esta lección

La memoización solo ayuda si evita trabajo observable y sus dependencias representan todos los datos usados. Considera una lista de tres productos: filtrar por "ca" devuelve “Café” y “Caja”; si products cambia de referencia, el cálculo debe repetirse aunque la consulta sea igual.

Ejemplo resuelto

jsx
const visible = React.useMemo(
  () => products.filter(p => p.name.toLowerCase().includes(query.toLowerCase())),
  [products, query]
);

Con Café, Caja, Pan y consulta ca, visible.length es 2.

Pruébalo

  1. Usa exactamente esos tres registros.

  2. Ejecuta el filtro con query="ca".

  3. Comprueba que los ids de salida corresponden a Café y Caja, en el mismo orden.

Comprueba tu resultado

Error frecuente: omitir query de dependencias y mostrar resultados antiguos. Corrígelo incluyendo cada entrada usada.

Ejercicio: cambia la consulta a pan; el resultado esperado es un solo registro, y no debes añadir React.memo a todos los componentes por defecto.

React.memo compara props y puede omitir un render si no cambian, pero no impide actualizaciones del estado propio o del contexto leído. Las referencias creadas nuevamente pueden anular la ventaja. Si React Compiler está habilitado, evalúa su memoización antes de añadirla manualmente.

Medir precede a comparar props con memo; props iguales permiten reutilizar. Un camino separado de Estado/Context puede actualizar el hijo, y useMemo conserva un valor calculado.
CursaloMapa de práctica
Optimiza después de medir

memo puede evitar trabajo cuando las props no cambian, pero el estado propio y Context siguen pudiendo actualizar el componente. Mide el coste antes de añadir memoización y conserva la corrección sin depender de ella.

Ver la infografía en tamaño completo ↗
Fuentes para profundizar

React.memo y useMemo: evitando renderizados innecesarios

La optimización en React no consiste en envolver todo con memoización. Consiste en medir, encontrar renders costosos y aplicar la herramienta correcta cuando hay un beneficio real.

Diferencias clave

  • React.memo: evita re-renderizar un componente si sus props no cambiaron.
  • useMemo: memoriza el resultado de un cálculo costoso entre renders.
  • useCallback: memoriza una función para evitar referencias nuevas cuando eso importa.
const VisibleItems = React.memo(function VisibleItems({ items }) {
  return items.map((item) => <li key={item.id}>{item.name}</li>);
});

function ProductList({ products, query }) {
  const filtered = useMemo(() => {
    return products.filter((product) =>
      product.name.toLowerCase().includes(query.toLowerCase())
    );
  }, [products, query]);

  return <VisibleItems items={filtered} />;
}

Cuándo no usarlo

No uses useMemo para cálculos triviales. La memoización también tiene costo mental y técnico. Primero medí con React DevTools Profiler.

Ejercicio: optimización medida

Tomá una lista grande con filtro. Medí renders con React DevTools, aplicá useMemo al cálculo de filtrado y compará antes/después.

Checklist

  • Identificaste un render o cálculo costoso.
  • La memoización tiene dependencias correctas.
  • Podés explicar por qué mejora o por qué no hacía falta.

Sigue con React Intermedio: Patrones y Optimización

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.