useLazyQuery页面加载报client.watchQuery不可设置standby fetchPolicy错误
解决思路
1. 修复依赖版本不兼容(核心原因)
你的项目依赖存在版本冲突:@apollo/react-hooks@^4.0.0 仅适配 Apollo Client 3.x 版本,而你安装的是 apollo-client@^2.6.10(2.x 旧版本),二者不兼容会导致内部逻辑异常:未触发的 useLazyQuery 会被强制注入 fetchPolicy: "standby" 的默认值,覆盖你手动配置的 no-cache 参数,最终触发报错。
可选择任意一种方案修复:
- 降级
@apollo/react-hooks到 3.x 版本,匹配 2.x 版本的 apollo-client - 卸载旧的
apollo-client、apollo-boost、apollo-cache-inmemory等零散包,统一替换为@apollo/client@3.x全家桶,对齐官方版本规范
2. 清理本地依赖缓存
该问题仅本地复现,大概率是本地缓存的依赖存在脏数据,按顺序执行以下操作:
- 删除项目根目录的
node_modules文件夹、package-lock.json(或 yarn.lock、pnpm-lock.yaml)锁文件 - 清理包管理器缓存:npm 执行
npm cache clean --force,yarn 执行yarn cache clean - 重新执行依赖安装命令,启动项目验证
3. 补充参数兜底
如果暂时不想调整依赖版本,可以在 useLazyQuery 配置项中额外添加两个参数,强制覆盖错误的默认逻辑:
const [getRoles] = useLazyQuery(GET_ALL_ACCOUNT_ROLES, { fetchPolicy: 'no-cache', nextFetchPolicy: 'no-cache', // 新增 notifyOnNetworkStatusChange: true, // 新增 // 原有onError、onCompleted逻辑保持不变 })
4. 对齐 TypeScript 版本
检查本地全局 TypeScript 版本是否和项目 package.json 中声明的 ^4.3.5 不一致:执行 tsc -v 查看版本,如果版本差异较大,可将全局 TypeScript 降级到匹配范围,或者使用项目本地的 TypeScript 版本执行编译。
内容的提问来源于stack exchange,提问作者Jake Tompkins
相关产品推荐
相关产品推荐

