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
}