Performance Optimizations with React Query

Just a guy who loves to write code and watch anime.
Select → Useful for API Responses
Most APIs return way more data than you need:
// API returns huge user object
const { data: userName } = useQuery({
queryKey: ['user', id],
queryFn: () => fetchUser(id), // Returns 50 fields
select: (user) => user.name // Only subscribe to name changes
})
// Component only re-renders when name changes, not when
// lastLoginAt, preferences, etc. update
Tracked Properties → Easy to Mess Up
// ❌ This kills performance - re-renders on EVERY query state change
const queryResult = useQuery({ queryKey, queryFn })
const allProps = { ...queryResult } // Accesses ALL properties!
// ✅ This only re-renders when data/error change
const { data, error } = useQuery({ queryKey, queryFn })
Request Cancellation → Critical for Search
Without cancellation, you get race conditions and wasted requests:
// User types "react" quickly: r -> re -> rea -> reac -> react
// Without signal: 5 requests, all complete, last one wins
// With signal: 4 requests cancelled, only "react" completes
const { data } = useQuery({
queryKey: ['search', searchTerm],
queryFn: ({ signal }) =>
fetch(`/api/search?q=${searchTerm}`, { signal })
})






