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

vue-apollo调用refetch后onResult被触发两次是否正常?

调用useQuery的refetch方法时onResult触发两次是否属于预期行为?

这个情况属于Apollo Client的预期行为,具体原因如下:

当调用refetch方法时,Apollo Client会分两个阶段触发onResult:

  1. 首次触发:此时返回结果的loading字段为true,数据是当前缓存中的旧数据(即便设置了network-only或no-cache,组件仍会先拿到之前的缓存数据作为过渡状态);
  2. 二次触发:网络请求完成后,返回结果的loading字段为false,数据是最新的网络返回内容。

你可以在onResult中打印data.loading来验证这个流程:

onResult(data => {
  console.log(data.loading, data);
});

如果只想处理最终的有效数据,可以在onResult中添加判断,过滤掉loading状态的回调:

onResult(data => {
  if (!data.loading) {
    console.log(data);
  }
});

另外,也可以在useQuery的配置项中设置notifyOnNetworkStatusChange: false,这样只有当数据实际更新时才会触发onResult,跳过loading状态的回调:

const { onResult, refetch } = useQuery(GQLendpoint, {
  ...options,
  notifyOnNetworkStatusChange: false
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:11:13