AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

React Query Best Practices

skill-arraydude-agent-skills-react-query-best-practices · by arraydude

React Query v4 (TanStack Query) best practices, patterns, and troubleshooting. Use when working with useQuery, useMutation, query invalidation, caching, WebSocket integration, or any async state management in React. Based on TkDodo's comprehensive blog series.

No reviews yet
0 installs
15 views
0.0% view→install

Install

$ agentstack add skill-arraydude-agent-skills-react-query-best-practices

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-arraydude-agent-skills-react-query-best-practices)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of React Query Best Practices? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

React Query Best Practices

> Important: This guide targets React Query v4. Some patterns may differ in v5.

Comprehensive guide for React Query v4 (TanStack Query) based on TkDodo's authoritative blog series. Contains 24 rules across 7 categories, prioritized by impact.

When to Apply

Reference these guidelines when:

  • Implementing new queries or mutations
  • Integrating WebSockets with React Query
  • Setting up query invalidation patterns
  • Debugging React Query behavior
  • Optimizing render performance
  • TypeScript integration questions

Rule Categories by Priority

| Priority | Category | Impact | Prefix | |----------|----------|--------|--------| | 1 | Query Keys & Patterns | CRITICAL | query- | | 2 | Mutations & Updates | CRITICAL | mutation- | | 3 | Caching Strategy | HIGH | cache- | | 4 | WebSocket Integration | HIGH | websocket- | | 5 | TypeScript Integration | MEDIUM | typescript- | | 6 | Testing Patterns | MEDIUM | testing- | | 7 | Common Pitfalls | MEDIUM | troubleshoot- | | 8 | Migration to v5 | HIGH | migration- |

Quick Reference

1. Query Keys & Patterns (CRITICAL)

  • query-keys-as-dependencies - Include all queryFn params in queryKey
  • query-key-factory - Use factory pattern for consistent key generation
  • query-select-transforms - Use select option for data transformations
  • query-status-check-order - Check data first, then error, then loading
  • query-tracked-properties - Only destructure properties you use
  • query-placeholder-vs-initial - Know when to use each approach
  • query-dependent-enabled - Use enabled option for dependent queries

2. Mutations & Updates (CRITICAL)

  • mutation-prefer-mutate - Use mutate() with callbacks over mutateAsync()
  • mutation-invalidation - Invalidate queries after mutations
  • mutation-direct-cache-update - Update cache directly when appropriate
  • mutation-optimistic-updates - Show success immediately, rollback on failure
  • mutation-callback-separation - Query logic in hook, UI effects in component

3. Caching Strategy (HIGH)

  • cache-stale-time - Set appropriate staleTime for your domain
  • cache-refetch-triggers - Keep refetch triggers enabled in production

4. WebSocket Integration (HIGH)

  • websocket-event-invalidation - Use events to trigger invalidation
  • websocket-stale-time-infinity - Set staleTime: Infinity for WS-managed data
  • websocket-reconnection - Invalidate stale queries on reconnect

5. TypeScript Integration (MEDIUM)

  • typescript-infer-dont-specify - Let TypeScript infer, type the queryFn
  • typescript-zod-validation - Use Zod for runtime validation

6. Testing Patterns (MEDIUM)

  • testing-fresh-client - Create fresh QueryClient per test
  • testing-msw-mocking - Use MSW for network mocking

7. Common Pitfalls (MEDIUM)

  • troubleshoot-copy-to-state - Never copy query data to local state
  • troubleshoot-missing-key-deps - Include all dependencies in query key
  • troubleshoot-fetch-not-reject - Handle HTTP errors with fetch

8. Migration to v5 (HIGH)

  • migration-single-signature - All hooks now take a single object argument
  • migration-status-pending - status 'loading' → 'pending'; isLoading semantics changed
  • migration-cache-time-to-gc-time - cacheTime renamed to gcTime
  • migration-keep-previous-data - keepPreviousData → placeholderData with identity fn
  • migration-query-callbacks-removed - onSuccess/onError/onSettled removed from useQuery
  • migration-suspense-hooks - New useSuspenseQuery, useSuspenseInfiniteQuery hooks
  • migration-throw-on-error - useErrorBoundary renamed to throwOnError
  • migration-remove-method - query.remove() removed; use queryClient.removeQueries()
  • migration-initial-page-param - initialPageParam now required for infinite queries
  • migration-refetch-page-to-max-pages - refetchPage replaced by maxPages
  • migration-hydration-boundary - Hydrate component renamed to HydrationBoundary
  • migration-refetch-interval-callback - refetchInterval callback now receives only query
  • migration-context-to-query-client - context prop removed; pass queryClient directly
  • migration-misc-breaking-changes - React 18 min, server retry=0, hashKey, isDataEqual, etc.

Core Mental Model

  1. React Query is NOT a data fetching library - it's an async state manager
  2. Server state != Client state - never mix them in global state managers
  3. Stale-while-revalidate - show cached data immediately, fetch in background
  4. Query keys are dependencies - include all variables used in queryFn

How to Use

Read individual rule files for detailed explanations and code examples:

rules/query-key-factory.md
rules/mutation-invalidation.md
rules/websocket-event-invalidation.md

Each rule file contains:

  • Brief explanation of why it matters
  • Incorrect code example
  • Correct code example

Full Compiled Document

For the complete guide with all rules expanded: AGENTS.md

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.