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

能否让Apollo的refetchQueries使用与mutation不同的客户端?

让refetchQueries在旧客户端执行的解决方案

完全可行,在Apollo Client的迁移过渡阶段,你可以通过自定义refetchQueries的逻辑,让指定查询在旧客户端执行,同时保持mutation在新客户端运行。

具体实现步骤

默认情况下,refetchQueries会复用useMutation配置的客户端(也就是这里的newClient)。要让MY_QUERY在旧客户端执行,你可以把refetchQueries改成函数形式,手动调用旧客户端的查询方法:

  1. 确保你持有旧客户端的实例(比如oldClient)
  2. 修改refetchQueries为异步函数,在函数内用旧客户端执行目标查询
  3. 开启awaitRefetchQueries: true,确保mutation等待查询完成后再结束

示例代码

// 假设你已经有旧客户端的实例
import oldClient from './path-to-old-client';

// 自定义refetch逻辑
const refetchQueries = async () => {
  // 用旧客户端执行未迁移的MY_QUERY
  await oldClient.query({
    query: MY_QUERY,
    variables
  });
  
  // 如果还有其他需要在新客户端执行的查询,也可以在这里添加
  // await newClient.query({ ... })
};

const [myMutation] = useMutation(MY_MUTATION, {
  client: newClient,
  refetchQueries,
  // 必须设置为true,确保等待refetch完成
  awaitRefetchQueries: true
});

补充说明

这种方式灵活性很高,你可以在refetchQueries函数里混合使用新旧客户端执行不同的查询,完美适配部分迁移的过渡场景。当后续MY_QUERY完成迁移后,只需要把执行客户端改成newClient即可。

内容的提问来源于stack exchange,提问作者Baptiste Pernet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:47:02