Volver al blog

React Compiler: El Fin del useMemo y useCallback Manual en 2026

Hola HaWkers, despues de anos de desarrollo, React Compiler v1.0 fue lanzado en octubre de 2025 y la adopcion en 2026 esta acelerando. El cambio mas significativo? Los hooks de memoization manual como useMemo, useCallback y React.memo se estan volviendo innecesarios en la mayoria de los casos. El compilador ahora hace esto automaticamente.

Que significa esto para tu codigo existente? Y cuando aun tiene sentido usar memoization manual?

Lo Que Cambio

La evolucion de React.

De Manual a Automatico

La historia de la optimizacion:

Era Pre-Compiler (2019-2024):

  • useMemo para calculos costosos
  • useCallback para funciones en props
  • React.memo para componentes
  • Mucha memoization innecesaria
  • Problemas de performance por falta de memoization

Era Compiler (2025+):

  • El compilador analiza el codigo
  • Agrega memoization automaticamente
  • Elimina overhead de hooks
  • Performance optimizada por defecto
  • Menos codigo boilerplate

Como Funciona el Compiler

Transformacion en build:

// Tu codigo (sin optimizacion manual)
function ProductCard({ product, onAddToCart }) {
  const formattedPrice = formatCurrency(product.price);
  const discount = calculateDiscount(product);

  return (
    <div className="product-card">
      <h3>{product.name}</h3>
      <p>{formattedPrice}</p>
      {discount > 0 && <span>{discount}% OFF</span>}
      <button onClick={() => onAddToCart(product)}>
        Agregar
      </button>
    </div>
  );
}

// Lo que el Compiler genera (simplificado)
function ProductCard({ product, onAddToCart }) {
  const $ = useMemoCache(6);

  let formattedPrice;
  if ($[0] !== product.price) {
    formattedPrice = formatCurrency(product.price);
    $[0] = product.price;
    $[1] = formattedPrice;
  } else {
    formattedPrice = $[1];
  }

  // ... resto del componente con cache
}

Antes vs Despues

Comparando codigo.

Codigo Antiguo (Pre-Compiler)

Como escribiamos antes:

// Antes: Mucho boilerplate de optimizacion
import { useMemo, useCallback, memo } from 'react';

const ProductList = memo(function ProductList({
  products,
  onSelect,
  category
}) {
  // Memoizando filtro
  const filteredProducts = useMemo(() => {
    return products.filter(p => p.category === category);
  }, [products, category]);

  // Memoizando calculos
  const stats = useMemo(() => {
    const total = filteredProducts.length;
    const avgPrice = filteredProducts.reduce(
      (sum, p) => sum + p.price, 0
    ) / total;
    return { total, avgPrice };
  }, [filteredProducts]);

  // Memoizando callbacks
  const handleSelect = useCallback((product) => {
    onSelect(product);
  }, [onSelect]);

  return (
    <div>
      <Stats data={stats} />
      {filteredProducts.map(product => (
        <ProductCard
          key={product.id}
          product={product}
          onSelect={handleSelect}
        />
      ))}
    </div>
  );
});

Codigo Nuevo (Con Compiler)

Como escribimos ahora:

// Ahora: Codigo limpio, compilador optimiza
function ProductList({ products, onSelect, category }) {
  const filteredProducts = products.filter(
    p => p.category === category
  );

  const total = filteredProducts.length;
  const avgPrice = filteredProducts.reduce(
    (sum, p) => sum + p.price, 0
  ) / total;

  return (
    <div>
      <Stats total={total} avgPrice={avgPrice} />
      {filteredProducts.map(product => (
        <ProductCard
          key={product.id}
          product={product}
          onSelect={() => onSelect(product)}
        />
      ))}
    </div>
  );
}

// Sin memo(), useMemo(), useCallback()
// El compilador cuida de todo

Configurando el Compiler

Setup paso a paso.

Instalacion

Agregando al proyecto:

# Instalando el compilador
npm install -D babel-plugin-react-compiler

# Para ESLint (recomendado)
npm install -D eslint-plugin-react-compiler

Configuracion Babel

Ajustes en babel.config.js:

// babel.config.js
module.exports = {
  plugins: [
    ['babel-plugin-react-compiler', {
      runtimeModule: 'react/compiler-runtime',
    }],
  ],
  presets: [
    '@babel/preset-react',
    '@babel/preset-typescript',
  ],
};

Cuando Aun Usar Hooks Manuales

Casos especificos.

Efectos Secundarios Controlados

Cuando useMemo aun tiene sentido:

// AUN NECESARIO: Side effects en memo
function DataFetcher({ query }) {
  // useMemo para controlar cuando fetch sucede
  const data = useMemo(() => {
    // Esto tiene side effect (logging, analytics)
    console.log('Fetching:', query);
    analytics.track('search', { query });

    return fetchData(query);
  }, [query]);

  // El compilador NO agrega side effects
  // Debe ser explicito aqui
}

Impacto en Performance

Resultados reales.

Benchmarks

Numeros de produccion:

Aplicacion E-commerce (500 componentes):

Metrica Manual Compiler Diferencia
Bundle size 245KB 238KB -3%
First render 180ms 165ms -8%
Re-render 45ms 38ms -16%
Memory 42MB 39MB -7%

Buenas Practicas 2026

Como escribir React moderno.

Codigo Idiomatico

El nuevo estandar:

// RECOMENDADO: Codigo simple y directo
function UserProfile({ user, onFollow }) {
  // Calculos inline - compilador optimiza
  const fullName = `${user.firstName} ${user.lastName}`;
  const joinDate = formatDate(user.createdAt);
  const isVerified = user.followers > 10000;

  return (
    <div className="profile">
      <Avatar src={user.avatar} />
      <h2>{fullName}</h2>
      <span>{joinDate}</span>
      {isVerified && <VerifiedBadge />}
      <button onClick={() => onFollow(user.id)}>
        Seguir
      </button>
    </div>
  );
}

El React Compiler representa un cambio de paradigma en como escribimos React. En 2026, el estandar es escribir codigo simple y dejar que el compilador optimice. Los hooks manuales de memoization se estan convirtiendo en excepcion, no regla.

Si quieres aprender mas sobre otras novedades de React, te recomiendo que veas otro articulo: React 19.2 y Partial Pre-rendering: La Nueva Era del Renderizado Web donde descubriras el Partial Pre-rendering.

Vamos con todo! 🦅

💻 Domina JavaScript de Verdad

El conocimiento que adquiriste en este articulo es solo el comienzo. Hay tecnicas, patrones y practicas que transforman desarrolladores principiantes en profesionales buscados.

Invierte en Tu Futuro

He preparado material completo para que domines JavaScript:

Formas de pago:

  • 1x de $4.90 sin intereses
  • o $4.90 al contado

📖 Ver Contenido Completo

Comentarios (0)

Este artículo aún no tiene comentarios 😢. ¡Sé el primero! 🚀🦅

Añadir comentarios