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

Next.js构建报错:No QueryClient set,需配置QueryClientProvider

问题分析与修复方案

问题根源

开发模式下Next.js以客户端渲染为主,组件在浏览器端完成hydration后才会执行React Query hooks,此时QueryClient可能通过局部配置或动态加载生效;但next build执行静态生成(SSG)时,会在构建阶段直接渲染页面组件,若组件使用了React Query hooks却未被QueryClientProvider全局包裹,就会触发No QueryClient set错误。

修复步骤

1. 全局配置QueryClientProvider

在项目的pages/_app.js文件中,全局包裹整个应用,确保所有页面都能访问到QueryClient:

import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import '../styles/globals.css';

// 创建全局QueryClient实例
const queryClient = new QueryClient({
  // 可选配置:关闭不必要的自动重取,优化生产环境表现
  defaultOptions: {
    queries: {
      refetchOnWindowFocus: false,
    },
  },
});

function MyApp({ Component, pageProps }) {
  return (
    <QueryClientProvider client={queryClient}>
      <Component {...pageProps} />
    </QueryClientProvider>
  );
}

export default MyApp;

2. 清理局部重复配置

检查GridView、TableView页面或其子组件中是否存在单独的QueryClientProvider,移除重复配置,确保全局Provider是唯一的上下文来源,避免上下文冲突。

3. 适配静态生成场景(可选)

如果页面使用getStaticProps做静态数据预取,可直接在getStaticProps中获取数据并通过props传递,减少构建阶段对React Query的依赖;若必须在组件内使用React Query,可通过动态导入组件强制仅在客户端渲染:

import dynamic from 'next/dynamic';

// 仅在客户端加载依赖React Query的组件
const DataTable = dynamic(() => import('../components/DataTable'), {
  ssr: false,
});

验证修复

执行next build命令确认构建成功,再通过next start启动生产模式,验证页面功能正常。

内容的提问来源于stack exchange,提问作者Vikash Rathee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:14:55