What is Invalidation?
When you invalidate a query:- The query is marked as stale (regardless of its
staleTime) - If the query is currently being rendered, it refetches in the background
query.ts:380-384:
query.ts:665-669:
Basic Invalidation
Invalidate Specific Queries
Invalidate Multiple Queries
Invalidation API
FromqueryClient.ts:293-313, the invalidateQueries method:
Refetch Type
Control which queries are refetched after invalidation:Active queries are queries currently being observed (rendered in components). Inactive queries are in the cache but not currently observed.
Query Filters
Exact Matching
Prefix Matching (Default)
Predicate Function
Filter by Status
Common Invalidation Patterns
After Mutations
The most common use case - invalidate after creating, updating, or deleting data:Hierarchical Invalidation
Related Queries
Invalidation vs. Refetch
invalidateQueries
Marks queries as stale and refetches active queries by default:- Marks queries as stale immediately
- Refetches active queries automatically
- Inactive queries refetch when they become active
refetchQueries
Forces an immediate refetch without marking as stale:queryClient.ts:315-339:
Reset Queries
Reset queries to their initial state:queryClient.ts:258-276:
- Resets the query state to initial
- Refetches active queries
Automatic Invalidation
Window Focus
Queries automatically refetch when the window regains focus (if stale):Network Reconnection
Queries refetch when the network reconnects (if stale):Mount
Queries refetch when new instances mount (if stale):Manual Invalidation Strategy
Conservative Approach
Invalidate only what changed:Aggressive Approach
Invalidate everything related:Hybrid Approach
Optimistic update + invalidation:Cancelling Queries
Cancel in-flight queries before invalidating:Invalidation Options
Best Practices
1. Use Query Key Factories
2. Invalidate in onSettled
UseonSettled to invalidate whether the mutation succeeds or fails: