CodeForge

React 19 de Cero a Experto / Datos

Reto: construye tu propio useQuery

Reto45 min100 XP

Entendiste TanStack Query desde afuera; hoy lo entiendes desde ADENTRO construyendo tu propio useQuery en miniatura —un custom hook con caché compartida, estados y refetch que CORRE en vivo—. Es el mismo enfoque "desde cero" con el que en JavaScript hiciste tu propio expect, tu propio pub-sub y tu propio pipe. Cuando termines, la magia de TanStack no será magia: será un Map de caché y unos estados bien orquestados que ya sabrás reconstruir.

Reto

Tu propio useQuery

Difícil45 min100 XP(×2 sin mirar la solución)

Qué debes construir

Un hook useQuery casero que reproduzca lo esencial de TanStack Query:

  1. useQuery(key, queryFn): recibe una clave (string) y una función async, y devuelve { data, cargando, error, refetch }.
  2. Caché compartida por clave: un Map module-level (fuera de React). Dos componentes que usen la misma clave comparten el dato cacheado —el segundo NO vuelve a "Cargando…" si ya está—.
  3. Estados correctos: cargando mientras la queryFn corre, error si lanza, data al resolver.
  4. refetch: una función que vuelve a ejecutar la queryFn y actualiza la caché.
  5. Demo: dos componentes que usan la MISMA clave; el segundo aparece con datos al instante desde la caché.

Reglas

  • La caché vive FUERA del componente (un Map a nivel de módulo), como el store del SC-02.
  • Maneja la race condition: si el componente se desmonta antes de resolver, no actualices su estado.
  • Todo tipado con TypeScript y genérico (<T>).

45:00

Cuando estés listo, arranca el reloj.

Qué sigue

Módulo 5 conquistado: dominas el estado del SERVIDOR —TanStack Query, caché, mutaciones, Suspense, Error Boundaries— y hasta construiste tu propia versión. Pero queda el estado del CLIENTE que muchos componentes comparten: el tema, el usuario logueado, un carrito. Pasarlo por props se vuelve un suplicio (prop drilling). El módulo 6 resuelve el estado global: Context, Zustand, máquinas de estado (XState) y cuándo cada uno.