【问题标题】:How to perform type coercion with Relay?如何使用 Relay 执行类型强制?
【发布时间】:2017-04-18 16:37:34
【问题描述】:

relay 是否能够知道字段应该是 Date,例如,并将该值从 string 转换为 Date?有没有地方可以放这种逻辑?

【问题讨论】:

  • 我认为这应该通过查询的resolve函数来完成

标签: reactjs graphql relay


【解决方案1】:

也许,这取决于您希望转换发生的位置。

如果它是一个变量,Relay 容器有一个 prepareVariables 支持函数。不过,我怀疑这就是您所追求的,因为您不能(afaik)将Date 对象作为var 传递。如果是这样的话, 不过,这里有一个例子adapted from the docs:

module.exports = Relay.createContainer(ProfilePicture, {
  initialVariables: {size: 5},
  prepareVariables: prevVariables => {
    return {
      ...prevVariables,
      size: typeof prevVariables.size === 'number'? * prevVariables.size : Number(prevVariables.size),
    };
  },
});

如果您希望强制输出 Relay 容器,则必须在使用 props 的组件中或在高阶组件中执行此操作。这是使用最高级recompose(以及同一作者的recompose relay-container)的相同示例:

export default compose(
  createContainer({
      fragments: {
        widget: () => Relay.QL`
          fragment on Widget {
            myDate
          }`
      }
  }),
  withProps(props => ({myDate: props.widget.myDate instanceof myDate ? props.widget.myDate : new Date(props.widget.myDate)}))
)(ProfilePicture)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2021-10-01
    • 2020-03-18
    • 2019-04-24
    相关资源
    最近更新 更多