对多个字段使用 @include 指令

Mai*_*uiz 0 graphql relayjs

我有一个中继容器,可以使用 有条件地获取某些字段@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
        }
      }
    `,
  },
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让我只编写一次指令,例如这样的东西(而且我知道这段代码不起作用):

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

我尝试了其他一些疯狂的方法,但没有一个起作用,我得到了这个错误:

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

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

Rya*_*yan 6

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

fragment on Company {
  ... on Company @include(if: $expandDetails) {
    employees { fullName }
    admins { fullName }
    departments { fullName }
  }
}
Run Code Online (Sandbox Code Playgroud)