CodeForge

React 19 de Cero a Experto / Estado

El estado es una foto fija: updates funcionales

Teoría20 min20 XP

Una sutileza que confunde a TODO principiante de React: dentro de un render, el estado es una FOTO FIJA —no cambia aunque llames a set varias veces—. Por eso setCuenta(cuenta + 1) tres veces seguidas suma solo 1, no 3. Entender esto y su solución (las actualizaciones funcionales) te ahorra una clase entera de bugs sutiles.

La foto del momento

El problema: tres sumas, un resultado

Míralo en vivo. El botón de la izquierda llama setCuenta(cuenta + 1) tres veces… y suma solo 1:

El botón "mal" suma 1 porque las tres llamadas usan cuenta —la foto de este render, digamos 0— y todas calculan 0 + 1 = 1. React no actualiza cuenta a mitad del manejador; el nuevo valor solo aparece en el siguiente render. El botón "bien" suma 3 porque usa la forma FUNCIONAL.

La solución: la forma funcional

Por qué React funciona así: el batching

Este comportamiento no es un capricho —es una optimización llamada batching. React AGRUPA varias actualizaciones de estado que ocurren en el mismo evento y hace UN solo re-render con el resultado final, en vez de repintar tres veces. Por eso el estado se mantiene como una foto estable durante el manejador: React está juntando tus cambios para aplicarlos de una vez. La forma funcional (prev) es cómo le dices "encadena estas actualizaciones", y él las aplica en orden sobre el valor más reciente. El resultado: una UI rápida (menos renders) y actualizaciones predecibles cuando usas prev.

En un manejador escribes setCuenta(cuenta + 1) dos veces seguidas, con cuenta valiendo 5. ¿Cuál es el resultado y cómo sumar 2 de verdad?

Mini-reto

Comprueba el snapshot: 1) crea un contador y un botón "+2" que llame setCuenta(cuenta + 1) dos veces —observa que suma 1—; 2) cámbialo a la forma funcional setCuenta(prev => prev + 1) dos veces y confirma que ahora suma 2; 3) haz un toggle (un booleano abierto) con setAbierto(prev => !prev) y siente por qué prev es la forma segura. Interioriza que el estado es una foto.

Qué sigue

Dominas el estado numérico. El caso más común en apps reales son los FORMULARIOS: inputs cuyo valor vive en el estado. La próxima lección enseña los inputs controlados —el patrón donde el estado es la única fuente de verdad de lo que el usuario escribe—, la base de todo formulario en React.