TanStack Query: server state moderno en React

Aprende por qué TanStack Query simplifica fetching, cache e invalidación frente al patrón manual con useEffect.

Cuando trabajas con datos de servidor, `useEffect + useState` se queda corto rápido: duplicas lógica de loading/error/cache en muchas pantallas.

TanStack Query está diseñado para gestionar server state de forma declarativa, eficiente y escalable.

Con `useQuery` obtienes estados de carga, error y datos cacheados con una API consistente.

Además, puedes invalidar consultas tras mutaciones para refrescar datos sin lógica manual compleja.

  • No reemplaza React; complementa React para manejar datos remotos con criterio de producto.
  • Separa claramente estado de servidor (cacheable, asincrónico) del estado local de UI.
  • Evita re-fetches innecesarios gracias a cache inteligente por `queryKey`.
  • Incluye reintentos, stale-time y utilidades de invalidación muy útiles en escenarios reales.
  • Menos boilerplate manual.

Por qué usar TanStack Query

No reemplaza React; complementa React para manejar datos remotos con criterio de producto.

Separa claramente estado de servidor (cacheable, asincrónico) del estado local de UI.

Evita re-fetches innecesarios gracias a cache inteligente por `queryKey`.

Incluye reintentos, stale-time y utilidades de invalidación muy útiles en escenarios reales.

  • Menos boilerplate manual.
  • Cache automática por clave.
  • Estados de petición listos (`isLoading`, `isError`, `data`).
  • Sincronización más robusta tras cambios.

Setup mínimo con QueryClientProvider

Toda la app debe estar envuelta por el provider para habilitar cache compartida.

Primer useQuery en producción

Declara `queryKey` y `queryFn` para describir cómo obtener un recurso.

La `queryKey` identifica el recurso en cache: usa claves estables y expresivas.

`queryFn` debe devolver promesa y lanzar error cuando la respuesta no sea válida.

Desde ahí, la UI se limita a responder a estados del hook en lugar de gestionar todo manualmente.

React
14

TanStack Query: server state moderno en React

Aprende por qué TanStack Query simplifica fetching, cache e invalidación frente al patrón manual con useEffect.

Código del tema: const { data } = useQuery({ queryKey:["items"] });

📘 Teoría

Por qué usar TanStack Query

No reemplaza React; complementa React para manejar datos remotos con criterio de producto.

Separa claramente estado de servidor (cacheable, asincrónico) del estado local de UI.

Evita re-fetches innecesarios gracias a cache inteligente por `queryKey`.

Incluye reintentos, stale-time y utilidades de invalidación muy útiles en escenarios reales.

  • Menos boilerplate manual.
  • Cache automática por clave.
  • Estados de petición listos (`isLoading`, `isError`, `data`).
  • Sincronización más robusta tras cambios.

Setup mínimo con QueryClientProvider

Toda la app debe estar envuelta por el provider para habilitar cache compartida.

Inicialización base
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const queryClient = new QueryClient();

function Root() {
  return (
    <QueryClientProvider client={queryClient}>
      <App />
    </QueryClientProvider>
  );
}

Primer useQuery en producción

Declara `queryKey` y `queryFn` para describir cómo obtener un recurso.

1

La `queryKey` identifica el recurso en cache: usa claves estables y expresivas.

2

`queryFn` debe devolver promesa y lanzar error cuando la respuesta no sea válida.

3

Desde ahí, la UI se limita a responder a estados del hook en lugar de gestionar todo manualmente.

🧪 Aprende probando

Ejemplo Ejemplo: listado de usuarios con useQuery Carga de usuarios con cache y estados de red gestionados por TanStack Query.

🏁 Retos

Reto Reto: define queryKey estable Completa la consulta añadiendo una `queryKey` para el recurso de posts.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre React.

Test de React

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .