【问题标题】:Use @include directive for more than one field对多个字段使用@include 指令
【发布时间】:2017-11-20 07:30:56
【问题描述】:

我有一个中继容器,它使用@include(if: $variable) 有条件地获取一些字段,但我必须为每个单独的字段编写指令:

const relayOptions = {
  initialVariables: {
    expandDetails: false,
  },
  fragments: {
    company: Relay.QL`
      fragment on Company {
        id
        name
        employees @include(if: $expandDetails) {
          fullName
        }
        admins @include(if: $expandDetails) {
          fullName
        }
        departments @include(if: $expandDetails) {
          name
        }
      }
    `,
  },
}

有什么方法可以让我只编写一次指令,例如像这样(我知道这段代码行不通):

const relayOptions = {
  initialVariables: {
    expandDetails: false,
  },
  fragments: {
    company: Relay.QL`
      fragment on Company {
        id
        name
        @include(if: $expandDetails) {
          employees {
            fullName
          }
          admins {
            fullName
          }
          departments {
            name
          }
        }
      }
    `,
  },
}

我尝试了一些其他疯狂的方法,但都没有奏效,我收到了这个错误:

'@include' 不能应用于片段定义(允许:字段、片段扩展、内联片段)

编辑:注意:我需要这样做以避免不必要地获取数据。我只想在显示数据的可折叠组件展开时才获取数据(计划在安装组件后使用setVariables 进行此操作)。 在此示例中,只有 3 个条件字段,但在实际情况中,我尝试解决的问题远不止这些。

【问题讨论】:

    标签: graphql relayjs


    【解决方案1】:

    您可以将指令放在内联片段上,并使用与外部字段相同的类型:

    fragment on Company {
      ... on Company @include(if: $expandDetails) {
        employees { fullName }
        admins { fullName }
        departments { fullName }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 2020-10-09
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多