TanStack Query for Next.js
TanStack Query v5 provides powerful server state management with Next.js 16 integration.
Agent Workflow (MANDATORY)
Before ANY implementation, use TeamCreate to spawn 3 agents:
- fuse-ai-pilot:explore-codebase - Analyze existing data fetching patterns
- fuse-ai-pilot:research-expert - Verify latest TanStack Query v5 docs
- mcp__context7__query-docs - Check TanStack Query + Next.js patterns
After implementation, run fuse-ai-pilot:sniper for validation.
Overview
When to Use
- Client-side data fetching with caching and revalidation
- Server-side prefetching with hydration to client
- Optimistic updates for mutations
- Infinite scrolling and pagination
- Real-time data synchronization
Why TanStack Query
| Feature | Benefit | |---------|---------| | Server prefetching | Data ready on first render, no loading flash | | Automatic caching | Deduplication, stale-while-revalidate | | Mutations | Optimistic updates, rollback on error | | DevTools | Visual cache inspection | | TypeScript-first | Full type inference |
Critical Rules
- One QueryClient per request - Create in Server Component, share via context
- Prefetch in Server Components - Use
prefetchQueryfor SSR data - HydrationBoundary required - Wrap client tree to transfer server cache
- Query keys must be serializable - Arrays of strings/numbers only
staleTimeon prefetched queries - Prevent immediate refetch on mount- Never use
queryClientin Client Components directly - Use hooks
Installation
bun add @tanstack/react-query @tanstack/react-query-devtools
Best Practices
- Prefetch on server - Avoid loading states for critical data
- Set
staleTime- Prevent unnecessary refetches after hydration - Collocate query keys - Define keys near their usage
- Invalidate on mutation - Use
invalidateQueriesafter writes - Error boundaries - Use
throwOnErrorfor critical queries - DevTools in dev only - Wrap in
process.env.NODE_ENVcheck
Reference Guide
| Need | Reference | |------|-----------| | useQuery, useMutation | query-patterns.md | | Server prefetching | hydration.md | | QueryClient setup | hydration.md | | Cache invalidation | query-patterns.md |