用途:在 React Native 或 Expo 应用中实现网络请求、API 调用、数据缓存与离线支持,包括鉴权令牌管理。核心原则是把服务器状态与客户端 UI 状态分离,服务器状态交给 TanStack Query 管理。
主要能力:使用标准 Fetch API 发起 GET、POST JSON 与 FormData 文件上传;用 TanStack Query 的 useQuery、useInfiniteQuery、useMutation 处理查询、分页与变更,支持依赖查询、乐观更新与缓存失效;用 expo-secure-store 安全保存访问令牌与刷新令牌,并在 fetch 封装中处理 401 刷新重试;用 NetInfo 与 onlineManager 感知网络状态实现离线提示;用 AbortController 与 queryClient.cancelQueries 取消请求;本地存储可选 react-native-mmkv 或 AsyncStorage,并可与 Zustand persist 集成。
使用方式:安装命令如 npx expo install @tanstack/react-query、npx expo install expo-secure-store、npx expo install @react-native-community/netinfo、npx expo install react-native-mmkv react-native-nitro-modules 后执行 npx expo prebuild。在根布局用 QueryClientProvider 包裹应用并配置 staleTime、gcTime、retry、refetchOnWindowFocus。环境变量使用 EXPO_PUBLIC_ 前缀,可通过 eas env:create 按环境配置。
适用场景:REST 或 GraphQL 接口调用、响应缓存、乐观更新、令牌管理、离线优先或弱网、组件卸载或导航时取消请求。
限制与注意:令牌应存于 expo-secure-store 而非 AsyncStorage;MMKV 需原生模块与 prebuild,AsyncStorage 可在 Expo Go 直接使用;移动端应关闭 refetchOnWindowFocus;需处理 401 过期;避免在 useEffect 中无清理地请求;v5 中 cacheTime 已更名为 gcTime。具体收费与平台支持资料暂未提供。