我有一个使用apollo-client写有理性反应的应用程序。 我在前端定义了一些片段,以基本上重用一些字段定义。 我正在为使用片段的组件设置自动化测试,但是我不断收到此警告,提示我需要使用IntrospectionFragmentMatcher

'You are using the simple (heuristic) fragment matcher, but your queries contain union or interface types. Apollo Client will not be able to accurately map fragments. To make this error go away, use the `IntrospectionFragmentMatcher` as described in the docs: https://www.apollographql.com/docs/react/advanced/fragments.html#fragment-matcher'

我已经尝试根据docs设置片段匹配器。 代码生成结果不返回任何类型:

{
  "__schema": {
    "types": []
  }
}

当我查询服务器并查看apollo-client推荐的手动方法时,我注意到它也不会返回任何类型。

另一个奇怪的事情是,当我不使用片段匹配器时,我得到了模拟响应,但是我只是从阿波罗得到了警告。 如果我确实使用它,那么模拟的响应将无法正确返回。

为什么要在graphql api中查询前端代码中定义的片段? 为什么在运行测试和使用模拟数据时只收到这些错误,而在运行实际应用程序时却没有收到这些错误?

#1楼 票数:0

由于错误状态,默认片段匹配器不适用于交集或并集类型。 您将需要使用Apollo的IntrospectionFragmentMatcher 它的工作方式是询问服务器(自省)有关您的模式类型的信息,然后提供该信息以供高速缓存参考,以便它可以准确匹配字段。 它不是在服务器上查询有关您在前端定义的片段的信息,而是在询问有关必须在后端定义的GraphQL模式的数据,以便它可以正确地将两者关联起来。 文档中有一个示例, 此处还有更多信息。

至于为什么服务器不返回任何类型,这是一个单独的问题,需要更多信息才能调试。 如果您使用的是Apollo服务器,请仔细检查您的架构,以确保正确定义了所有必需的类型,并且在初始化时将它们传递到服务器中。

  ask by lukashambsch translate from so

未解决问题?本站智能推荐:

1回复

Apollo 客户端片段未嵌入数据

这是我第一次冒险进入碎片,我看不出我在哪里搞砸了,但它绝对不起作用! 在 GraphiQL 中它工作正常: 这是我的客户端应用程序中的内容: 因此,服务器返回正确的数据,正如我在 Chrome 的“网络”选项卡中看到的那样,但是useQuery结果接收到的数据是一个空对象。 是什么赋予了?
1回复

角度的 Apollo 客户端:从 graphql 文件生成代码

我从这里开始了解angular graphql 代码生成器。 我试图在我的项目中使用它来生成 angular 的 graphql 类型和Query服务。 我的 codegen.yml 文件如下所示。 我有一个带有以下内容的 graphql 文件apps\\myGraphQLApp\\src\\
1回复

无法为 apollo-graphql 客户端生成查询文件

我正在尝试遵循Apollo graphql 教程并坚持创建Apollo Client当我运行npm run codegen它被转换为apollo client:codegen --target typescript --watch它给了我以下错误: 我的launch.tsx看起来正确: 我的
1回复

Apollo客户端Graphql查询变量类型错误

我正在尝试执行ID为必填项的删除查询,但出现错误。 “未提供所需类型为“ ID!”的变量“ $ id”” 询问 vuex操作中的变异代码
1回复

Apollo 客户端的代码生成器在我的类型中添加了不需要的“或空”

Apollo 客户端的代码生成器添加| null | null在生成的类型中,我不明白它们为什么在那里以及如何摆脱它们。 我看不出为什么 API 会返回一个空数组,所以我不想每次都检查我的代码天气对象是否为空。 来自 apollo codegen 的违规生成类型: export interf
1回复

为什么在片段上使用apollo客户端查询会给我一个空对象,而api工作正常?

我想获得动态类型的数据。 为此,我在graphql查询中使用片段。 Api在graphql playground中正常工作但是当我试图将它与react-apollo客户端集成时,它给了我一个空对象以及警告!在控制台中进行启发式片段匹配。 当我使用npm install和npm run
1回复

无法从apollo客户端导入createBatchingNetworkInterface

我正在尝试将graphql与我的vue项目集成。 我正在按照以下说明进行操作: https : //github.com/Akryum/vue-apollo 我已经根据需要安装了npm'apollo-client',但是由于某种原因我无法导入'createBatchingNetworkI
1回复

apollo 客户端是否支持事务?

我有一个 nuxtjs 应用程序,它使用 apollo 模块与 FaunaDB 进行 graphql 通信。 我想在对 FaunaDB 的一笔交易中进行多次更改。 所以我不想向 FaunaDB 发送每个突变的不同请求,我想发出一个包含所有突变的请求。 是否可以?