You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在react-query中修改useQuery的默认配置选项?

React Query 全局配置useQuery默认选项的方法

当然可以实现,而且步骤很清晰,核心是通过QueryClient的全局配置结合QueryClientProvider来让所有useQuery自动继承默认选项,具体操作如下:

1. 创建QueryClient时配置全局默认选项

在实例化QueryClient时,通过defaultOptions.queries字段定义useQuery的全局默认配置,比如缓存时长、重试策略、窗口聚焦是否重请求等:

import { QueryClient } from '@tanstack/react-query';

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 5 * 60 * 1000, // 5分钟内数据视为新鲜,不自动触发重请求
      refetchOnWindowFocus: false, // 窗口切换后不自动重请求
      retry: 1, // 请求失败后仅重试1次
      refetchOnMount: true, // 组件挂载时自动重请求(默认值)
    },
  },
});

2. 通过Provider全局注入QueryClient

将配置好的queryClient通过QueryClientProvider包裹根组件,这样整个应用内的useQuery都会自动读取全局默认配置:

import { QueryClientProvider } from '@tanstack/react-query';
import { queryClient } from './path-to-your-query-client';

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      {/* 你的应用页面/组件都放在这里 */}
    </QueryClientProvider>
  );
}

3. 局部覆盖默认配置(可选)

如果某个特定的useQuery需要单独配置,直接在调用时传入选项即可,局部配置会优先于全局默认值:

const { data } = useQuery({
  queryKey: ['user-profile'],
  queryFn: fetchUserProfile,
  staleTime: 0, // 这里会覆盖全局的5分钟缓存设置
  retry: 0, // 禁用该请求的重试
});

关联原理说明

QueryClientProvider会把QueryClient实例注入到React上下文,useQuery内部会自动从上下文获取这个实例,并应用其中的defaultOptions.queries配置,无需手动关联,全局注入后就会生效。

内容的提问来源于stack exchange,提问作者Tom Larkworthy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:20:24