What TanStack Query Does
- Caching — automatic with configurable
staleTime/gcTime - Deduping — identical requests collapsed
- Background refetch — on window focus, reconnect, interval
- Pagination/Infinite queries — first-class support
- Mutations — optimistic updates with rollback
- Devtools — inspect cache state in real time
Architecture
Singleton QueryClient holds the cache. Each useQuery subscribes via queryKey. Cache invalidation uses key prefix matching: queryClient.invalidateQueries({ queryKey: ["todos"] }).
Self-Hosting
No backend. Client-only library. Install via package manager.
Key Features
- Framework-agnostic core
- Typed queries (infer from queryFn)
- Optimistic updates
- Parallel & dependent queries
- Prefetching & SSR support (Next.js, Remix, Nuxt)
- Offline support
- Automatic retries with exponential backoff
Comparison
| Library | Scope | Mutations | Caching |
|---|---|---|---|
| TanStack Query | Server state | Yes | Automatic |
| SWR | Server state | Limited | Automatic |
| Redux Toolkit Query | Server state | Yes | Manual tags |
| Apollo Client | GraphQL | Yes | Normalized |
常见问题 FAQ
Q: 和 Redux 冲突吗? A: 不。Redux 管 client state,Query 管 server state。组合使用。
Q: staleTime 和 gcTime 区别?
A: staleTime 决定数据多久变为 stale(触发后台 refetch);gcTime 决定未订阅数据多久从 cache 删除。
Q: 支持 SSR 吗?
A: 支持。用 HydrationBoundary + dehydrate 在服务端预取。
来源与致谢 Sources
- Docs: https://tanstack.com/query
- GitHub: https://github.com/TanStack/query
- License: MIT