Reactjs 为什么';当返回相同的数据集时,我在WatchQuery上的订阅是否会触发?

Reactjs 为什么';当返回相同的数据集时,我在WatchQuery上的订阅是否会触发?,reactjs,graphql,react-apollo,apollo-client,Reactjs,Graphql,React Apollo,Apollo Client,我试图在对watchQuery执行refetch后调用回调 当我调用refetch时,如果返回的数据相同,那么我的订阅回调不会被触发,但是当数据不同时,这可以正常工作 我的假设是它与缓存相关,但更改缓存策略没有帮助 即使数据保持不变,在重新蚀刻后我如何执行一些代码 当前实现:我正在使用React Apollo客户端创建一个WatchQuery,如下所示: apolloClient.watchQuery({ query, variables, errorPolicy: 'all' }); 当我稍

我试图在对watchQuery执行refetch后调用回调

当我调用refetch时,如果返回的数据相同,那么我的订阅回调不会被触发,但是当数据不同时,这可以正常工作

我的假设是它与缓存相关,但更改缓存策略没有帮助

即使数据保持不变,在重新蚀刻后我如何执行一些代码

当前实现:我正在使用React Apollo客户端创建一个WatchQuery,如下所示:

apolloClient.watchQuery({ query, variables, errorPolicy: 'all' });
当我稍后调用refetch时,只要返回的数据与当前结果不同,订阅查询就可以正常工作:

query.subscribe(console.log);

// later I call refetch with new vars, a search term in this case

query.refetch(newVariables);

如果查询返回的数据集相同(例如,由于相同的搜索结果),则不会调用subscribe方法

更改查询的
fetchPolicy
似乎没有任何积极影响

下一步我应该试试什么?即使返回的数据相同,我如何在重新蚀刻后调用某些内容

软件包版本:

(我确实尝试过升级,希望有一个bug修复,但没有效果)


我想这可能是故意的行为。我已经有一段时间没有看过客户端源代码了,但我很确定订阅是针对相关缓存值本身的。这意味着对缓存的任何更新都将触发更改,而不管其来源是什么(网络还是直接更改缓存),但也意味着如果缓存值保持不变,则无需通知侦听器。如果缓存值保持不变,则无需重新提交。为什么您需要触发侦听器?在refetch之前,我启动一个“加载模式”,并在订阅方法中停止它,而不触发它@DanielReardenRefetch所以你可以等待它然后关闭模式,对吗?
"apollo-client": "^2.5.1",
"react-apollo": "^2.5.5",