【问题标题】:How to define Relay fragment for GraphQLList of GraphQLObjectType?如何为 GraphQLObjectType 的 GraphQLList 定义 Relay 片段?
【发布时间】: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')}
       }
    }`
  }
});

【问题讨论】:

    标签: java reactjs graphql relayjs


    【解决方案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 获取项目列表
    猜你喜欢
    • 2018-09-23
    • 2018-10-16
    • 1970-01-01
    • 2019-06-29
    • 2018-07-29
    • 2016-06-02
    • 2016-10-30
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多