微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apollo 缓存忽略字段别名作为键MockedProvider

如何解决Apollo 缓存忽略字段别名作为键MockedProvider

我发现 ApolloProvider 和 MockedProvider 之间的行为存在一些差异,并且在测试中引发错误

假设我有以下查询

query {
  Author {
    id: authorID
    name
  }
}

在 ApolloProvider 中,此查询使用字段别名作为键在 Apollo 缓存中创建条目,缓存中的每个 Author 都有一个 id。因此,Apollo 可以自动合并实体。

使用 MockedProvider 时,情况并非如此。当我模拟以下响应时:

const mockResponse = {
  data: {
    Author: {
      id: 'test!!',name: 'test'
    },},}

我收到以下错误

console.warn
      Cache data may be lost when replacing the Author field of a Query object.
      
      To address this problem (which is not a bug in Apollo Client),define a custom merge function for the Query.Author field,so InMemoryCache can safely merge these objects:
      
        existing: {"authorID":"test!!"...

因此,ApolloProvider 中完全相同的查询使用 id(字段别名)作为键,而在 MockedProvider 中,它只是将 authorID 添加为另一个字段条目。它忽略字段别名并且没有键。

显然现在什么都不能合并。我的第一个猜测是,这是因为 MockedProvider 无权访问架构,因此它不知道 authorID 是 ID 类型?还是我离题了?

对我来说很奇怪的一件事是我的 mockResponse 甚至没有提供 authorID。我的模拟响应是 { id: "test!!" } 但缓存显示{"authorID":"test!!"} 的条目,因此它本身以某种方式“无别名”。

我真的很难理解这里发生了什么。任何见解都会非常有用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。