问题描述
我发现 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 (将#修改为@)