React 19 de Cero a Experto / Estado
useState: la memoria de un componente
Todo lo del módulo 1 era estático: la UI describía datos fijos. useState lo cambia todo. Es
el hook que le da MEMORIA a un componente —un valor que persiste entre renders y que, al
cambiar, hace que React vuelva a pintar—. Es el corazón reactivo de React: cambias el estado,
la UI se actualiza sola. Hoy entiendes la pieza que hace vivas a las apps.
El marcador que recuerda y repinta
Declarar estado
useState devuelve una TUPLA (¿recuerdas las tuplas de TypeScript?): el valor actual y una
función para cambiarlo. La desestructuras con nombres a tu elección:
const [cuenta, setCuenta] = useState(0) declara un estado que arranca en 0. cuenta es el
valor actual (lo lees en el JSX); setCuenta es la función que lo cambia. Cuando haces clic y
llamas setCuenta(cuenta + 1), pasan dos cosas: React guarda el nuevo valor Y vuelve a
ejecutar el componente para pintar la UI con ese valor. Ese ciclo —cambiar estado → re-render—
es el latido de React.
Por qué no una variable normal
Nunca modifiques el estado directamente
Un error clásico: cambiar el valor del estado a mano en vez de usar la función set:
const [cuenta, setCuenta] = useState(0);
// ❌ MAL: modificar la variable directamente
cuenta = cuenta + 1; // no compila (cuenta es const) y aunque pudieras, React no se entera
// ✅ BIEN: usar la función 'set', que actualiza Y avisa a React de repintar
setCuenta(cuenta + 1);Siempre usa la función set (setCuenta) para cambiar el estado. Es lo único que le AVISA a
React que debe re-renderizar. Modificar el valor a mano (si pudieras) cambiaría el dato pero
dejaría la pantalla congelada —el estado y la UI se desincronizarían, justo lo que React existe
para evitar.
En un componente usas let total = 0 y al hacer clic haces total = total + 100. El número en pantalla nunca cambia. ¿Por qué, y cuál es la solución?
Mini-reto
Dale memoria a un componente: 1) crea un estado nombre (string) que arranque vacío y un
botón que al pulsarlo lo ponga en "Sara"; 2) muestra "Hola, {nombre}" y "Aún no me conoces" si
está vacío (ternario); 3) agrega un segundo estado clics (número) que cuente cuántas veces se
pulsó el botón. Observa cómo cada setX repinta la UI al instante.
Qué sigue
Ya cambias el estado. Pero hay una sutileza que confunde a todos: dentro de un mismo manejador,
el estado se comporta como una FOTO FIJA de ese render. La próxima lección explica por qué
setCuenta(cuenta+1) tres veces seguidas suma solo 1, y cómo arreglarlo con las actualizaciones
funcionales. La clave para no tener bugs sutiles de estado.