graphql - vue-apollo 是否有可能从 Playground 返回不同的结果?

标签 graphql apollo-client nuxt.js vue-apollo graphql-playground

我有一个名为 myAccounts 的 GraphQL 查询,它返回帐户数组。当我去 Playground 并调用查询时:

{
    accounts {
        email
    }
}

我得到这个结果:

"data": {
    "accounts": [
        {
            "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5822393b30183d353931347537363d763b3735" rel="noreferrer noopener nofollow">[email protected]</a>",
        },
        {
            "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cdb7acaea58da8a0aca4a1e0b9baa2e3aea2a0" rel="noreferrer noopener nofollow">[email protected]</a>",
        }
    ]
}

但是,当我在组件中时,vue-apollo 返回数组中的两个项目,但似乎用第一个项目覆盖第二个项目。以下是查询(在 MyAccounts.gql 中):

query myAccounts {
    accounts: myAccounts {
        email
    }
}

这是组件中的 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":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="324853515a72575f535b5e1f5d5c571c515d5f" rel="noreferrer noopener nofollow">[email protected]</a>",
            "__typename":"Account"
         },
         {
            "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="324853515a72575f535b5e1f5d5c571c515d5f" rel="noreferrer noopener nofollow">[email protected]</a>",
            "__typename":"Account"
         }
      ]
   },
   "loading":false,
   "networkStatus":7,
   "stale":false
}

预期行为 我希望 Playground 中返回的数据与 vue-apollo 获取的数据相同。

版本 vue:2.6.10 vue-apollo:@nuxtjs/apollo:4.0.0-rc18

其他上下文 我认为 result Hook 将是调试的最佳方式,但我们很高兴欢迎任何其他建议。我认为这是我们代码中的一个错误,但我无法弄清楚是什么导致了重复(和不匹配)。

最佳答案

Apollo 根据 __typenameid(或 _id)字段标准化其缓存。您需要在选择集中包含 id_id 字段以及 email。如果不这样做会导致两个对象被分配相同的键。如果您没有要请求的 id 字段,则需要提供自定义 dataIdFromObject 函数,如下所示 here .

关于graphql - vue-apollo 是否有可能从 Playground 返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149488/

相关文章:

graphql - 突变的 Apollo react 未定义

lambda - apollo-client 不适用于 CORS

javascript - Nuxt 3 包导入说明符 "#internal/nitro"未定义

graphql - 使用 NestJS TestingModule、GraphQL 代码优先和 TypeOrm 进行 e2e 测试的问题

graphql - 如何查询 GitHub v4 API 以获取特定标签处的目录内容?

vue.js - 从 apollo 缓存中读取查询,该查询尚不存在,但所有信息已存储在缓存中

javascript - 如何在 Nuxt 3 中配置或禁用内容安全策略(CSP)来渲染图像?

reactjs - 如何将 GraphQL 订阅与 React-relay 结合使用?

react-native - React-native Android 应用程序发布版本上的 Graphql 网络错误

vue.js - 如何在 nuxt.js 应用程序中使用 BugSnag?