React 19 de Cero a Experto / React 19 moderno
Reto: Mi Bolsillo con envío optimista
Cierras el módulo de React 19 construyendo la experiencia que estos hooks buscan: una "Mi Bolsillo"
donde agregar un gasto se siente INSTANTÁNEO —aparece al instante con un relojito, se confirma cuando
el "servidor" responde, y se revierte si falla—. Lo construyes con useState (que ya corre en tu
entorno) para dominar el PATRÓN a mano; la solución te muestra cómo useActionState y useOptimistic
lo expresarían en un proyecto React 19 real. Vas a entender la UI optimista de dentro hacia afuera.
Reto
Mi Bolsillo optimista
Qué debes construir
Una "Mi Bolsillo" que agrega gastos con envío optimista contra un servidor simulado:
- Servidor simulado: una función
guardar(nombre): Promise<void>que tarde ~1s y falle 1 de cada 4 veces (conMath.random()). - Agregar optimista: al enviar, el gasto aparece INMEDIATAMENTE en la lista, marcado como
pendiente (opacidad + un
⏳). - Confirmar: cuando el servidor responde OK, el gasto pierde la marca de pendiente (
✓). - Revertir: si el servidor falla, el gasto se QUITA de la lista y se muestra un aviso de error.
- El botón muestra un estado de "Guardando…" mientras hay un envío en curso.
Reglas
- Todo tipado con TypeScript; actualizaciones inmutables (
map,filter,[...]). - La lista es la fuente de verdad; el "pendiente" es una marca en cada item.
- Distingue claramente los tres momentos: optimista (se ve ya), confirmado, revertido.
35:00
Cuando estés listo, arranca el reloj.
Qué sigue
Módulo 4 conquistado: dominas el React moderno —Actions, useActionState, useOptimistic, use(),
la frontera servidor/cliente y el compilador—. Ya no solo sabes React: sabes hacia dónde va. El
módulo 5 aterriza en el problema más común de toda app real: DATOS. Cargar, cachear, reintentar,
invalidar y sincronizar con el servidor sin reinventar la rueda —con TanStack Query, Suspense y los
Error Boundaries—.