graphql - 如何在模式中实现 GraphQL 片段?
问题描述
我尝试fragments
使用GraphQL
有我的schema
用户/getUser.gql
input GetUserByUsernameInput {
username: String!
}
fragment UserFragment on User {
username
information
pictureUrl
}
type UserType {
...UserFragment
}
type GetUserByUsernameResponse {
user: UserType
errors: [Error]!
}
type Query {
getUserByUsername(input: GetUserByUsernameInput!): GetUserByUsernameResponse!
}
共享/User.gql
type User {
id: Int!
username: String!
email: String!
information: String
pictureUrl: String
}
我得到了虚拟错误
(node:26206) UnhandledPromiseRejectionWarning: Syntax Error: Expected Name, found ...
GraphQL request (12:9)
11: type UserType {
12: user: ...UserFragment
^
13: }
我的代码应该如何使用GraphQL fragments
?
PS。我用graphql-code-generator
解决方案
片段只存在于查询中;您不能在模式语言中使用它们。
在您的示例中,响应应包含对User
返回的引用:
type GetUserByUsernameResponse {
user: User
errors: [Error]!
}
但是,当您进行查询时,您可以包含该片段。
query WhoAreYou($username: String!) {
getUserByUsername(input: {username: $username}) {
user { ...UserFragment }
errors { message }
}
}
fragment UserFragment on User {
username
information
pictureUrl
}
如果您有理由在一个查询中多次请求同一类型对象上的相同字段,或者如果您有一个能够从 GraphQL 查询的“库”中挑选片段的客户端库,片段往往会更有用您将使用多个地方。(例如,Ruby graphql-client gem 可以配置一个包含许多查询的文件,您可以通过操作名称对其进行特定查询,它将使用该操作及其引用的任何片段进行查询,因此您可以在多个查询中重用相同的片段。)
推荐阅读
- scala - Spark`distinct`在使用.config时在本地模式下忽略`spark.default.parallelism`
- android - Android 多线程 - 协程和 UI 线程
- amazon-web-services - 如何在使用 HTTP 端点时从 AWS Api Gateway 返回多个 set-cookie 标头
- mql4 - 如果指标已过期,是否有一个函数( IndicatorRemove() 就像 ExpertRemove() 一样)从图表中删除指标?
- c++ - 返回时对象的字段是随机的
- sql - 为什么我得到一个无效的数据类型?
- python - “元组”对象没有属性“gpu_fraction”
- c# - 如何在完成“事件”时连接到 TransactionScope?
- c++ - 尝试使用 FreeType 2.10.1 时出现 LNK2019?
- node.js - 我的 React 站点在 PC 浏览器中加载正常,但在移动浏览器中加载不正常,为什么?