0Pricing
React Academy · Lección

Caché, stale time y actualización en segundo plano

Configure staleTime y gcTime para controlar cuándo se vuelven a obtener los datos del servidor.

Caché, stale time y actualización en segundo plano es una lección gratuita de React Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

Bienvenida

En esta lección configurará staleTime y gcTime para controlar durante cuánto tiempo React Query mantiene los datos actualizados y cuánto tiempo conserva los datos almacenados en caché en memoria.

Datos actualizados frente a obsoletos

React Query realiza un seguimiento de si los datos almacenados en caché están «actualizados» o «obsoletos». Los datos actualizados se devuelven inmediatamente sin realizar una solicitud de red. Los datos obsoletos se devuelven de inmediato, pero se inicia una obtención en segundo plano para actualizarlos.

staleTime

staleTime define durante cuánto tiempo (en milisegundos) los datos permanecen actualizados. El valor predeterminado es 0 (obsoletos inmediatamente). Al establecerlo en 60000, los datos obtenidos durante el último minuto se devuelven sin una obtención en segundo plano.
useQuery({
  queryKey: ['users'],
  queryFn: fetchUsers,
  staleTime: 60_000, // fresh for 60 seconds
})

Configuración de staleTime para datos estáticos

Para datos que cambian rara vez (por ejemplo, una lista de países u opciones de configuración), establezca un staleTime alto. Para datos en tiempo real (por ejemplo, precios de acciones), mantenga el valor predeterminado 0 y habilite el polling.
// Effectively never stale — reload only on explicit invalidation
useQuery({ queryKey: ['countries'], queryFn: fetchCountries,
  staleTime: Infinity })

gcTime (recolección de basura)

gcTime (anteriormente cacheTime) define durante cuánto tiempo los datos almacenados en caché que NO se utilizan permanecen en memoria antes de que se eliminen mediante la recolección de basura. El valor predeterminado es de 5 minutos. Incluso después de gcTime, React Query puede volver a obtener los datos inmediatamente si se monta un nuevo suscriptor.
useQuery({
  queryKey: ['products'],
  queryFn: fetchProducts,
  gcTime: 10 * 60 * 1000, // keep in memory for 10 minutes
})

staleTime frente a gcTime

staleTime controla CUÁNDO volver a obtener los datos (su frescura). gcTime controla CUÁNDO descartar los datos almacenados en caché de la memoria. La relación habitual es staleTime <= gcTime.

Indicadores de obtención en segundo plano

Cuando React Query vuelve a obtener datos en segundo plano, `isFetching` es true aunque `isLoading` sea false (los datos ya están almacenados en caché). Utilice isFetching para mostrar un indicador de carga sutil.
const { data, isLoading, isFetching } = useQuery({ /* ... */ });

return (
  <>
    {isLoading ? <Spinner /> : <DataView data={data} />}
    {isFetching && !isLoading && <RefreshIndicator />}
  </>
);

refetchOnWindowFocus

De forma predeterminada, React Query vuelve a obtener las consultas obsoletas cuando el usuario regresa a la pestaña. Deshabilite este comportamiento para datos que se actualizan rara vez.
useQuery({
  queryKey: ['settings'],
  queryFn: fetchSettings,
  refetchOnWindowFocus: false,
})

refetchInterval para polling

Establezca `refetchInterval` para consultar automáticamente una query con una frecuencia determinada. Resulta útil para paneles con datos en tiempo real.
useQuery({
  queryKey: ['liveStats'],
  queryFn: fetchStats,
  refetchInterval: 5000, // every 5 seconds
})

Datos de marcador de posición

Utilice `placeholderData` para mostrar los datos anteriores mientras se realiza una nueva obtención, evitando cambios de diseño. La opción keepPreviousData facilita este comportamiento durante la paginación.
import { keepPreviousData } from '@tanstack/react-query';

useQuery({
  queryKey: ['posts', page],
  queryFn: () => fetchPage(page),
  placeholderData: keepPreviousData,
})

Comprobación rápida

¿Qué consigue al establecer staleTime: Infinity en una consulta?

Resumen

staleTime controla la frescura: cuánto tiempo transcurre antes de que los datos activen una obtención en segundo plano. gcTime controla la memoria: cuánto tiempo permanecen almacenados en caché los datos que no se utilizan. isFetching indica las obtenciones en segundo plano. Utilice placeholderData para conseguir una paginación fluida.

A continuación

Siguiente lección: **Mutaciones con useMutation** — enviará datos a APIs e invalidará las consultas cuando la operación tenga éxito.

Preguntas frecuentes

¿La lección «Caché, stale time y actualización en segundo plano» es gratis?

Sí — el texto completo de «Caché, stale time y actualización en segundo plano» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Caché, stale time y actualización en segundo plano»?

Configure staleTime y gcTime para controlar cuándo se vuelven a obtener los datos del servidor. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Caché, stale time y actualización en segundo plano»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Configurar React Query y QueryClient
  2. Caché, stale time y actualización en segundo plano
  3. Mutaciones con useMutation
  4. Desplazamiento infinito y paginación con useInfiniteQuery
← Volver a React Academy