Memoización en React: React.memo, useMemo y useCallback con criterio

Aprende a optimizar renders de forma inteligente sin caer en sobre-optimización prematura ni complejidad innecesaria.

Optimizar en React no significa envolver todo en hooks de memoización; significa identificar cuellos de botella reales y actuar con precisión.

`React.memo` evita renders de componentes hijos cuando sus props no cambian.

`useMemo` cachea resultados costosos y `useCallback` estabiliza referencias de funciones entre renders.

Usados sin criterio, estos recursos pueden complicar código sin mejora tangible.

  • Primero mide, luego optimiza: no al revés.
  • Si la UI ya es fluida, añadir memoización masiva puede ser contraproducente en mantenimiento.
  • Optimiza especialmente listas grandes, cálculos pesados o subárboles complejos que se rerenderizan sin necesidad.
  • React DevTools Profiler te ayuda a confirmar dónde hay coste real de render.
  • Identificar componente crítico.

Cuándo tiene sentido optimizar

Primero mide, luego optimiza: no al revés.

Si la UI ya es fluida, añadir memoización masiva puede ser contraproducente en mantenimiento.

Optimiza especialmente listas grandes, cálculos pesados o subárboles complejos que se rerenderizan sin necesidad.

React DevTools Profiler te ayuda a confirmar dónde hay coste real de render.

  • Identificar componente crítico.
  • Medir antes/después.
  • Aplicar optimización puntual.
  • Revisar legibilidad tras optimizar.

Patrón combinado básico

Padre con estado local, hijo memoizado y callback estable.

Riesgos de sobre-optimización

Cada capa de memoización añade complejidad cognitiva.

Dependencias mal definidas pueden producir valores stale difíciles de detectar.

`useMemo` para cálculos triviales suele costar más de lo que ahorra.

Una arquitectura clara y componentes bien divididos suelen dar mejor rendimiento base que optimizaciones prematuras.

React
20

Memoización en React: React.memo, useMemo y useCallback con criterio

Aprende a optimizar renders de forma inteligente sin caer en sobre-optimización prematura ni complejidad innecesaria.

Código del tema: Componentes, estado y render declarativo

📘 Teoría

Cuándo tiene sentido optimizar

Primero mide, luego optimiza: no al revés.

Si la UI ya es fluida, añadir memoización masiva puede ser contraproducente en mantenimiento.

Optimiza especialmente listas grandes, cálculos pesados o subárboles complejos que se rerenderizan sin necesidad.

React DevTools Profiler te ayuda a confirmar dónde hay coste real de render.

  • Identificar componente crítico.
  • Medir antes/después.
  • Aplicar optimización puntual.
  • Revisar legibilidad tras optimizar.

Patrón combinado básico

Padre con estado local, hijo memoizado y callback estable.

React.memo + useCallback
import { memo, useCallback, useState } from 'react';

const Child = memo(function Child({ onPing }) {
  console.log('Render Child');
  return <button onClick={onPing}>Ping</button>;
});

function Parent() {
  const [count, setCount] = useState(0);

  const handlePing = useCallback(() => {
    console.log('pong');
  }, []);

  return (
    <>
      <button onClick={() => setCount((c) => c + 1)}>{count}</button>
      <Child onPing={handlePing} />
    </>
  );
}

Riesgos de sobre-optimización

Cada capa de memoización añade complejidad cognitiva.

1

Dependencias mal definidas pueden producir valores stale difíciles de detectar.

2

`useMemo` para cálculos triviales suele costar más de lo que ahorra.

3

Una arquitectura clara y componentes bien divididos suelen dar mejor rendimiento base que optimizaciones prematuras.

🧪 Aprende probando

Ejemplo Ejemplo: cálculo costoso memoizado `useMemo` evita recalcular una operación pesada cuando no cambian dependencias relevantes.

🏁 Retos

Reto Reto: memoiza una función callback Reemplaza una función inline por `useCallback` para mantener referencia estable.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre React.

Test de React

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .