中继:根据父查询的结果参数化getFragment

时间:2016-04-17 11:50:03

标签: graphql relayjs relay

我的CMS返回一个节点列表,每个节点都有自己的节点类型。对于每个节点类型,我都定义了相应的GraphQL类型。

type getContent {
  content: [ContentNode]
}

我想要一个类似的查询:

{
  content{
    contentType
    properties {
       ${ContentType.getFragment('content', type: $contentType???)}
    }
  }
}

ContentType将根据提供给它的类型变量返回正确的片段定义。但是如何从父结果中获取$contentType

1 个答案:

答案 0 :(得分:2)

您不能拥有依赖于父级实际值的片段,因为片段是在实际向服务器发出查询请求之前组成的。处理此问题有两种不同的方法,一种是基于变量使片段不同,另一种是在组件内使用接口和类型片段。

这是一个很好的答案,显示了使用变量的示例:Conditional fragments or embedded root-containers when using Relay with React-Native

对于接口解决方案,如果您有ContentNode接口,其实现类似于' ContentNode1'和' ContentNode2'然后你可以这样做:

{
  content {
    ${ContentType.getFragment('content')}
  }
}

在您的ContentType组件中

fragment on ContentNode {
   contentType
   someOtherCommonField
   ... on ContentNode1 {
     someContent1Field
   }

   ... on ContentNode2 {
     someContent2Field
   }
}