使用 GraphQL 的“其他”

Ars*_*-II 2 relay apollo graphql

如何使用 GQL 指令实现“else”效果

有一种方法来获取与有条件的东西GQL使用@include(if: $withFriends)

query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但如果$withFriends是假的,我想获取其他东西。我可以通过传递额外的变量来实现它$notWithFriends

query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
    appearsIn @include(if: $notWithFriends)
  }
}
Run Code Online (Sandbox Code Playgroud)

问题:是否可以避免使用附加变量?

像这样:@include(else: $withFriends)@include(ifNot: $withFriends)@include(if: !$withFriends)

Dan*_*den 8

您可以使用@skip指令,它的工作原理与@include- 如果if参数为true:则省略选择集中的字段:

query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
    appearsIn @skip(if: $withFriends)
  }
}
Run Code Online (Sandbox Code Playgroud)

这样,如果$withFriendstrue,只有namefriends会被选中。如果是false,则只有nameappearsIn将被选中。