当您将字段定义为两种类型的并集(在示例机器中包含Ships和Droid)时,在Relay中您可以执行以下操作:
fragment on Faction@ relay(plural: true) {
name,
machines {
... on Ship {
name
}
... on Droid {
name,
primaryFunction
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在机器支持下,您的对象被正确评估,但如果您想使用外部组件的片段进行评估:
fragment on Faction@ relay(plural: true) {
name,
machines {
${StarWarsShip.getFragment('ship')}
${StarWarsDroid.getFragment('droid')}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你最终得到机器下的片段定义.它看起来像你被困,无法检查哪个对象是机器数组中的哪个类型,因此你无法决定应该使用哪个组件.
存在一个__typename字段,您应该能够内省每个记录的类型:
fragment on Faction @relay(plural: true) {
name,
machines {
__typename # <-- add this
${StarWarsShip.getFragment('ship')}
${StarWarsDroid.getFragment('droid')}
}
}
Run Code Online (Sandbox Code Playgroud)
this.props.faction.machines.map(machine =>
machine.__typename === 'Droid'
? <Droid droid={machine} />
: <Ship ship={machine} />
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |