能否让Apollo的refetchQueries使用与mutation不同的客户端?
让refetchQueries在旧客户端执行的解决方案
完全可行,在Apollo Client的迁移过渡阶段,你可以通过自定义refetchQueries的逻辑,让指定查询在旧客户端执行,同时保持mutation在新客户端运行。
具体实现步骤
默认情况下,refetchQueries会复用useMutation配置的客户端(也就是这里的newClient)。要让MY_QUERY在旧客户端执行,你可以把refetchQueries改成函数形式,手动调用旧客户端的查询方法:
- 确保你持有旧客户端的实例(比如
oldClient) - 修改
refetchQueries为异步函数,在函数内用旧客户端执行目标查询 - 开启
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
相关产品推荐
相关产品推荐

