如何解决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 举报,一经查实,本站将立刻删除。