当您将字段定义为两种类型的联合(例如,示例计算机包含Ships和Droid)时,在Relay中,您可以执行以下操作:
fragment on Faction@ relay(plural: true) {
name,
machines {
... on Ship {
name
}
... on Droid {
name,
primaryFunction
}
}
}
因此,在机器道具下,您的对象可以正确评估,但是如果要使用外部组件的片段来进行评估:
fragment on Faction@ relay(plural: true) {
name,
machines {
${StarWarsShip.getFragment('ship')}
${StarWarsDroid.getFragment('droid')}
}
}
那么您最终会在计算机下找到片段定义。看来您被困了,无法检查机器数组中哪种对象是哪种类型,因此您无法决定应使用哪个组件。
存在一个__typename
字段,您应该可以使用该字段来检查每个记录的类型:
fragment on Faction @relay(plural: true) {
name,
machines {
__typename # <-- add this
${StarWarsShip.getFragment('ship')}
${StarWarsDroid.getFragment('droid')}
}
}
this.props.faction.machines.map(machine =>
machine.__typename === 'Droid'
? <Droid droid={machine} />
: <Ship ship={machine} />
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句