Skip to main content

Command Palette

Search for a command to run...

Performance Optimizations with React Query

Updated
1 min read
Performance Optimizations with React Query
T

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 })
})