«другое» с GraphQL

Как добиться эффекта «иначе» с помощью директив GQL

Есть способ получить что-то условно с gql, используя @include(if: $withFriends)

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

Но я хочу получить что-то еще, если $withFriends ложно. Я могу добиться этого, передав дополнительную переменную $notWithFriends

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

Вопрос: можно ли не использовать дополнительную переменную?

Что-то вроде этого: @include(else: $withFriends) или @include(ifNot: $withFriends) или @include(if: !$withFriends)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
2
0
1 688
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать директиву @skip, которая работает как противоположность @include — она пропускает поле из набора выбора, если аргумент if равен true:

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

Таким образом, если $withFriends равно true, будут выбраны только name и friends. Если это false, будут выбраны только name и appearsIn.

Другие вопросы по теме