中继中的联合类型支持

扎卢奇

当您将字段定义为两种类型的联合(例如,示例计算机包含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')}
  }
}

那么您最终会在计算机下找到片段定义。看来您被困了,无法检查机器数组中哪种对象是哪种类型,因此您无法决定应使用哪个组件。

Steveluscher

存在一个__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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章