Consumo de status page con TanStack Query — guía useQuery
Consume tu endpoint de estado PulseAPI con useQuery. Caché, refetch on focus, polling por intervalo y SSE en tiempo real — todo en un hook tipado.
Tres formas de lanzar una página de estado para TanStack Query
Elige el nivel de control que necesitas — sin código, low-code o headless completo.
Alojado
Añade tu endpoint TanStack Query, apunta un CNAME a status.tudominio.com, listo. Funciona en 5 minutos.
Headless
Usa nuestra API pública para construir tu propia UI dentro de tu app TanStack Query. Control total sobre diseño y marca.
Ver la APIBadges embebidos
Coloca badges SVG de uptime y estado en tu README o landing page. Se actualizan cada 5 minutos.
Pega este health endpoint en tu app TanStack Query
Copia, pega, apunta PulseAPI a la URL. Devuelve 200 sano, 503 degradado.
import { useQuery } from '@tanstack/react-query'
interface StatusData {
page: { title: string; customDomain: string | null }
overallStatus: 'operational' | 'degraded' | 'down' | 'maintenance' | 'unknown'
endpoints: Array<{
id: string
name: string
status: string
uptime24h: number
avgResponseTime: number
}>
}
export const useStatusQuery = (slug: string) =>
useQuery<StatusData>({
queryKey: ['status', slug],
queryFn: async () => {
const r = await fetch(`https://api.pulseapi.tech/status/${slug}`)
if (!r.ok) throw new Error(`Status ${r.status}`)
return r.json()
},
staleTime: 30_000,
refetchInterval: 30_000,
refetchOnWindowFocus: true,
})Usa staleTime y refetchInterval de 30 segundos para coincidir con nuestro heartbeat SSE. Para actualizaciones en tiempo real sin polling, combina este hook con nuestro stream /sse/status/:slug y usa queryClient.setQueryData para parchear el caché en eventos.
Qué se rompe en apps TanStack Query — y cómo detectarlo
Estado viejo en pestañas con mucha duración
Un dashboard abierto toda la noche muestra banner verde mientras producción está caída. refetchInterval + refetchOnWindowFocus mantiene el caché honesto.
Parpadeo de contenido incorrecto durante revalidación
placeholderData + keepPreviousData te permite seguir mostrando el último status bueno mientras hay un refetch en vuelo — sin parpadeo entre "operational" y skeleton.
Demasiados requests paralelos desde componentes anidados
Varios componentes llamando useStatusQuery dispararían un request cada uno — React Query deduplica por queryKey, así que solo hay un fetch en vuelo por slug.
¿No te gusta nuestra página de estado? Construye la tuya en TanStack Query.
Nuestra API devuelve los mismos datos que consume nuestra UI alojada. Spec OpenAPI completa en api.pulseapi.tech/docs.
import { useStatusQuery } from './use-status-query'
export function StatusBanner({ slug }: { slug: string }) {
const { data, isLoading, error } = useStatusQuery(slug)
if (isLoading) return <div className="skeleton" />
if (error) return null
if (!data) return null
if (data.overallStatus === 'operational') return null
return (
<a href={`https://${data.page.customDomain}`} className="banner">
{data.overallStatus === 'down' ? 'Service disruption' : 'Degraded service'}
{' — '}
{data.endpoints.filter((e) => e.status !== 'operational').length} affected
</a>
)
}Monitoreo TanStack Query — FAQ
¿Cómo combino useQuery con SSE para actualizaciones en tiempo real?
Abre un EventSource a /sse/status/:slug en un useEffect, y en cada evento llama queryClient.setQueryData(["status", slug], to merge event patches into the existing cache entry. Esto mantiene a los suscriptores de useQuery actualizados sin polling.
¿Funciona con TanStack Query v4 y v5?
Ambos. En v4 usa cacheTime, en v5 se renombró a gcTime. isLoading en v5 es estrictamente "primera carga"; usa isPending + isFetching si quieres cualquier indicador de request en vuelo.
¿Puedo prefetch del estado en el servidor con Next.js o Remix?
Sí. Llama queryClient.prefetchQuery en un server component o loader, envuelve tu árbol en HydrationBoundary (v5) o Hydrate (v4) con estado deshidratado. Tu hook useStatusQuery lee del caché hidratado en el primer render — sin flicker en cliente.
¿Es seguro usar mi API key de org en useQuery?
No — cualquier key en JS del navegador es pública. El endpoint público de estado no requiere auth; usa keys de org solo en servidor. Proxy a través de una ruta backend (/api/status) y llama ese proxy desde useQuery si necesitas auth.
Empieza a monitorear tu app TanStack Query en 5 minutos
Plan gratuito. Sin tarjeta. Añade tu endpoint y recibe alertas cuando falle.