如何为GraphQLObjectType的GraphQLList定义Relay片段?

时间:2016-12-14 15:54:39

标签: java reactjs graphql relayjs

我有一个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 个答案:

答案 0 :(得分:2)

  

是否可以创建一个类型的字段   GraphQL查询中的 GraphQLList(SomeGraphQLObjectType)并在其中使用它   Relay.QL {}声明片段?

是的,可以在@relay(plural: true)指令的帮助下完成。它告诉Relay这个字段是一个列表,而不是单个项目。

定义这样的字段,其中Item是具有相同name的GraphQLObjectType:

itemList: {
  type: new GraphQLList(Item),
  // other stuff including resolve function
},

由于您已将中继容器划分为父级和子级,因此请按以下方式定义父容器:

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中了解有关Relay指令的更多信息。

你可以看一下similar question

  

这是继电器“连接”工作的地方吗?

这取决于。如果您不想一次拍摄所有物品,那么连接就是您的选择。它可以递增地获取数据。