如何为 GraphQLObjectType 的 GraphQLList 定义 Relay 片段?
Posted
技术标签:
【中文标题】如何为 GraphQLObjectType 的 GraphQLList 定义 Relay 片段?【英文标题】:How to define Relay fragment for GraphQLList of GraphQLObjectType? 【发布时间】:2017-04-30 00:48:12 【问题描述】:我已经定义了一个 graphql-java 实现和一个模式。 是否可以在 GraphQL 查询中创建 GraphQLList(SomeGraphQLObjectType) 类型的字段并在 Relay.QL 声明片段中使用它,以便我可以接收所需对象的列表?这是中继“连接”工作的地方吗?
export default Relay.createContainer(ChildComponent,
fragments:
item: () => Relay.QL`
fragment on Item
id,
name,
color
id,
name
`
);
export default Relay.createContainer(ParentComponent,
fragments:
list: () => Relay.QL`
fragment on ListOfItems
allItems
$ChildComponent.getFragment('item')
`
);
【问题讨论】:
【参考方案1】:是否可以创建类型的字段 GraphQLList(SomeGraphQLObjectType) 在 GraphQL 查询中并在 Relay.QL 声明片段?
是的,这可以在@relay(plural: true)
指令的帮助下实现。它告诉 Relay 这个字段是一个列表,而不是单个项目。
像这样定义字段,其中Item
是具有相同name
的GraphQLObjectType:
itemList:
type: new GraphQLList(Item),
// other stuff including resolve function
,
由于您已将 Relay 容器分为父容器和子容器,因此请像这样定义父容器:
export default Relay.createContainer(ParentComponent,
fragments:
itemList: () => Relay.QL`
fragment on Item @relay(plural:true)
$ChildComponent.getFragment('item')
`,
,
);
还有这样的子容器:
export default Relay.createContainer(ChildComponent,
fragments:
item: () => Relay.QL`
fragment on Item
id,
name,
color
id,
name,
`,
,
);
您可以在 Clay Allsopp 的 this article 中了解有关中继指令的更多信息。
还有一个similar question,你也可以看看。
这是中继“连接”工作的地方吗?
这取决于。如果您不希望一次性完成所有项目,那么连接是您的最佳选择。它支持增量获取数据。
【讨论】:
感谢您快速而有根据的回复!在我使用它之后,我想我应该在查询中考虑 Viewer 根类型,这可能会使 ParentComponent 获取项目列表以上是关于如何为 GraphQLObjectType 的 GraphQLList 定义 Relay 片段?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 GTK3 配置 VSCode 以进行智能感知/构建/调试和 g++