我的CMS返回一个节点列表,每个节点都有自己的节点类型。对于每个节点类型,我都定义了相应的GraphQL类型。
type getContent {
content: [ContentNode]
}
我想要一个类似的查询:
{
content{
contentType
properties {
${ContentType.getFragment('content', type: $contentType???)}
}
}
}
ContentType将根据提供给它的类型变量返回正确的片段定义。但是如何从父结果中获取$contentType
?
答案 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
}
}