【问题标题】:Apollo Client 3 evict query result - doesn't work?Apollo Client 3 驱逐查询结果 - 不起作用?
【发布时间】:2021-02-13 15:15:20
【问题描述】:

使用 Apollo Client 3 并删除所有查询结果,而不管参数如何。像这样尝试过;

       cache.evict({
          id: "ROOT_QUERY",
          fieldName: "countries"
        });

        cache.gc();

尽管没有从缓存中删除,__APOLLO_CLIENT__.cache.data 仍然在缓存中保留所有结果。 另一方面,我可以删除单个 Country 对象。

你可以在这里看到它sandbox

【问题讨论】:

  • 重置商店就是为了这个
  • 找不到任何样本!...
  • 我只想删除特定查询的结果,而不是清除整个商店。
  • 好的,我稍微研究了一下这个问题......缓存条目被删除(console.log("cache", cache.data.data);),-gc() 没关系......但问题在于钩子,视图不是当“数据”被清除时重新渲染......恕我直言,这是一个阿波罗问题,因为更改被传播(this.broadcastWatches(); 调用),“数据”应该再次设置为未定义......解决方法? writeQuery 有大量数据?
  • 感谢@xadm。你是对的,它是关于useLazyQuerycache.evict({ id: "ROOT_QUERY", fieldName: "countries" }); 在这个cache.evict 之后,apollo 客户端无法协调查询和缓存,所以它再次查询。您认为我们可以使用相同的 useLazyQuery 钩入输出页面和不同的获取策略来克服这个问题吗?

标签: reactjs graphql apollo-client


【解决方案1】:

简单添加broadcast: false参数即可解决问题;

               cache.evict({
                  id: 'ROOT_QUERY',
                  fieldName: 'countries',
                  broadcast: false,
                });
                cache.gc();

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2018-07-30
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2020-11-02
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多