AgentSkillsCN

react-data-patterns

运用 TanStack Query 进行数据获取、优化 React 重新渲染、遵循 JavaScript 性能模式,并结合 React Native 的异步最佳实践。涵盖 useQuery、useMutation、缓存失效、React Native 焦点/在线状态管理器、派生状态、记忆化、函数式 setState,以及 JavaScript 性能优化。

SKILL.md
--- frontmatter
name: react-data-patterns
description: Data fetching with TanStack Query, React re-render optimization, JS performance patterns, and async best practices for React Native. Covers useQuery, useMutation, cache invalidation, React Native focus/online managers, derived state, memoization, functional setState, and JavaScript performance optimizations.
license: MIT
metadata:
  tags: react-native, tanstack-query, react-query, data-fetching, performance, re-renders, optimization

React Data Patterns for React Native

Overview

Data fetching, caching, re-render optimization, and JavaScript performance patterns for React Native applications. Complements the react-native-best-practices skill (which covers FPS, TTI, bundle size, memory, animations, and native modules).

When to Apply

Reference these guidelines when:

  • Setting up or using TanStack Query (React Query)
  • Implementing data fetching, caching, or mutations
  • Optimizing component re-renders
  • Writing performance-sensitive JavaScript
  • Handling async operations (parallel fetching, dependency chains)
  • Setting up offline support or app focus refetching

Priority-Ordered Guidelines

PriorityCategoryImpactReference
1TanStack Query for React NativeCRITICALtanstack-query-react-native.md
2Re-render OptimizationHIGHrerender-patterns.md
3Async Data PatternsHIGHasync-data-patterns.md
4JS PerformanceMEDIUMjs-performance-patterns.md
5Advanced React PatternsMEDIUMadvanced-react-patterns.md

Quick Reference

TanStack Query

tsx
// useQuery - server state with automatic caching
const { data, isLoading } = useQuery({
  queryKey: ['users'],
  queryFn: () => fetchUsers(),
})

// useMutation - with cache invalidation
const { mutate } = useMutation({
  mutationFn: createUser,
  onSuccess: () => queryClient.invalidateQueries({ queryKey: ['users'] }),
})

// useInfiniteQuery - paginated lists
const { data, fetchNextPage } = useInfiniteQuery({
  queryKey: ['feed'],
  queryFn: ({ pageParam = 0 }) => getFeed({ page: pageParam }),
  initialPageParam: 0,
  getNextPageParam: (lastPage) => lastPage.nextPage,
})

React Native Focus/Online Manager

tsx
import { focusManager, onlineManager } from '@tanstack/react-query'
import { AppState } from 'react-native'
import NetInfo from '@react-native-community/netinfo'

// Refetch on app focus
focusManager.setEventListener((handleFocus) => {
  const sub = AppState.addEventListener('change', (state) => {
    handleFocus(state === 'active')
  })
  return () => sub.remove()
})

// Track online status
onlineManager.setEventListener((setOnline) => {
  return NetInfo.addEventListener((state) => {
    setOnline(!!state.isConnected)
  })
})

Re-render Optimization

  • Derive state during render, not in effects
  • Use functional setState for stable callbacks
  • Use lazy state initialization for expensive values
  • Narrow effect dependencies to primitives
  • Use useRef for transient values that don't need re-renders
  • Use startTransition for non-urgent updates

Async Patterns

tsx
// Parallel independent operations
const [user, posts] = await Promise.all([fetchUser(), fetchPosts()])

// Dependency-based parallelization
const userPromise = fetchUser()
const profilePromise = userPromise.then(u => fetchProfile(u.id))
const [user, config, profile] = await Promise.all([
  userPromise, fetchConfig(), profilePromise
])

Problem -> Skill Mapping

ProblemStart With
Need data fetching/cachingtanstack-query-react-native.md
Manual refetch after mutationstanstack-query-react-native.md (useMutation section)
Stale data after app backgroundtanstack-query-react-native.md (Focus Manager)
Too many re-rendersrerender-patterns.md
Slow list renderingrerender-patterns.md (memo, derived state)
Sequential API callsasync-data-patterns.md
Slow loops/lookupsjs-performance-patterns.md
Effect re-runs too oftenadvanced-react-patterns.md

References

FileImpactDescription
tanstack-query-react-native.mdCRITICALTanStack Query patterns for React Native
rerender-patterns.mdHIGHReact re-render optimization patterns
async-data-patterns.mdHIGHParallel fetching and dependency chains
js-performance-patterns.mdMEDIUMJavaScript performance optimizations
advanced-react-patterns.mdMEDIUMAdvanced React hook patterns

Attribution

TanStack Query patterns based on TanStack Query documentation. React and JS patterns adapted from Vercel Engineering's React best practices.