React 19 de Cero a Experto / React 19 moderno
El compilador de React: adiós al useMemo manual
Durante años, escribir React rápido significaba optimizar los re-renders A MANO con tres
herramientas: memo, useMemo y useCallback. Era tedioso, fácil de equivocar, y llenaba el
código de ruido. El COMPILADOR de React (React Compiler) cambia eso: analiza tu código y aplica esas
optimizaciones automáticamente, para que las escribas… nunca. Hoy entiendes primero POR QUÉ existían
esas herramientas (para saber qué te quita de encima el compilador) y luego cómo funciona la nueva
era.
El problema: re-renders en cascada
Las tres herramientas manuales (el mundo de antes)
Por qué era un dolor
// El "impuesto" de la memoización manual: ruido por todas partes
const Lista = memo(function Lista({ items, alBorrar }: Props) {
// useMemo para no recalcular en cada render
const ordenados = useMemo(() => [...items].sort((a, b) => b.valor - a.valor), [items]);
return <ul>{ordenados.map((i) => <li key={i.id} onClick={() => alBorrar(i.id)}>{i.nombre}</li>)}</ul>;
});
function App() {
const [items, setItems] = useState<Item[]>([]);
// useCallback para que 'borrar' no cambie de referencia y rompa el memo de <Lista>
const borrar = useCallback((id: number) => {
setItems((prev) => prev.filter((i) => i.id !== id));
}, []);
return <Lista items={items} alBorrar={borrar} />;
}Mira cuánta ceremonia: memo envolviendo el componente, useMemo para el orden, useCallback para
la función, cada uno con su array de dependencias que hay que mantener correcto. Olvidar una
dependencia introduce bugs sutiles; poner memoización de más gasta esfuerzo sin beneficio. Decidir
QUÉ memoizar y CÓMO era una carga constante para el desarrollador —un impuesto sobre cada componente
que quisieras rápido—.
El compilador: lo hace por ti
Honestidad sobre el estado actual
¿Qué problema resuelven memo/useMemo/useCallback, y qué cambia con el compilador de React?
Mini-reto
Razona (en papel): tienes un <Padre> con un contador en useState y un <HijoPesado> que recibe
una prop datos que NO cambia cuando el contador sube. 1) ¿Por qué <HijoPesado> re-renderiza al
subir el contador aunque sus datos no cambien? 2) ¿Cómo lo evitarías a mano con memo (y qué pasa si
datos fuera un objeto creado en el render del padre)? 3) ¿Qué haría el compilador de React aquí sin
que escribas nada? Explica el papel de la igualdad referencial en las tres respuestas.
Qué sigue
Cierras el módulo con un reto que junta las ideas de React 19 en una "Mi Bolsillo" con envío
OPTIMISTA: el gasto aparece al instante y se confirma o revierte. Lo construyes con las herramientas
que ya corren en tu entorno, y la solución te muestra cómo lo expresarían useActionState y
useOptimistic en un proyecto React 19 real —el puente entre lo que practicaste y el React del
futuro—.