Graphql vue apollo是否可能从操场返回不同的结果?
我有一个名为Graphql vue apollo是否可能从操场返回不同的结果?,graphql,apollo-client,nuxt.js,vue-apollo,graphql-playground,Graphql,Apollo Client,Nuxt.js,Vue Apollo,Graphql Playground,我有一个名为myAccounts的GraphQL查询,它返回一个帐户数组。当我去操场打电话询问: { accounts { email } } 我得到这个结果: "data": { "accounts": [ { "email": "zach@email-one.com", }, { "email": "zach@email-two.com",
myAccounts
的GraphQL查询,它返回一个帐户数组。当我去操场打电话询问:
{
accounts {
email
}
}
我得到这个结果:
"data": {
"accounts": [
{
"email": "zach@email-one.com",
},
{
"email": "zach@email-two.com",
}
]
}
但是,当我在我的组件中时,vue apollo
返回数组中的两项,但似乎用第一项覆盖第二项。以下是查询(在MyAccounts.gql
中):
下面是组件中的Apollo查询:
import MY_ACCOUNTS_QUERY from '~/apollo/queries/MyAccounts'
...
apollo: {
accounts: {
query: MY_ACCOUNTS_QUERY,
result(data) {
console.log(JSON.stringify(data))
}
}
}
以下是vue apollo通过结果注销的内容:
{
"data":{
"accounts":[
{
"email":"zach@email-one.com",
"__typename":"Account"
},
{
"email":"zach@email-one.com",
"__typename":"Account"
}
]
},
"loading":false,
"networkStatus":7,
"stale":false
}
预期行为
我希望在操场上返回的数据与vue apollo
获取的数据相同
版本
vue:2.6.10
vue阿波罗:@nuxtjs/apollo:4.0.0-rc18
附加上下文
我认为result
hook将是调试的最佳方式,但欢迎任何其他建议。我认为这是我们代码中的一个bug,但我无法找出导致重复(和不匹配)的原因。来自Guillaume Chau():
这是因为Apollo客户端缓存无法计算其他ID
对于这两个项目,则以Account结尾:未定义(或类似)
两者都有。打开Apollo开发工具,查看myAccounts输入
缓存
了解更多信息:
Apollo基于\uu typename
和id
(或\u id
)字段对其缓存进行规范化。您需要在选择集中的电子邮件旁边包含id
或id
字段。否则将导致两个对象被指定相同的键。如果您没有要请求的id
字段,则需要提供自定义的dataIdFromObject
函数,如图所示。感谢您链接到dataIdFromObject
函数。了解这一点很有帮助。dataIdFromObject
的更新被弃用,取而代之的是TypePolicy
对象的keyFields
选项。
{
"data":{
"accounts":[
{
"email":"zach@email-one.com",
"__typename":"Account"
},
{
"email":"zach@email-one.com",
"__typename":"Account"
}
]
},
"loading":false,
"networkStatus":7,
"stale":false
}