Как мы можем различать директивы include и skip в graphql?

Хотя обе директивы могут скрывать поле. Когда include имеет значение false, он работает так же, как когда skip имеет значение true, то, что их отличает.

Я думаю, эта статья может показать вам, в чем отличие?

Toan Lu 25.10.2018 12:57

@Abhijeet Raj, если предоставленные ответы не подходят с вашей точки зрения, пожалуйста, добавьте дополнительные сведения к вопросу

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

Ответы 2

Единственная разница должна быть в том случае, если вы применяете обе директивы одновременно. Скип должен иметь более высокое приоритетное значение.

Код обеих директив очень похож.

Согласно спецификации, реальной разницы нет - обе директивы могут использоваться для предотвращения разрешения поля. Под капотом единственное отличие состоит в том, что если в поле существуют и skip, и include, логика skip будет оцениваться первой (т.е. если skip истинно, поле всегда будет опускаться независимо от значения include).

Между ними нет предпочтения. Наличие обеих директив позволяет повторно использовать одну и ту же переменную для обоих случаев, когда вы хотите включить или исключить разные поля. Это также упрощает чтение запросов и их обоснование.

Например, если у вас была такая схема:

type Query {
  pet: Pet
}

type Pet {
  # other fields
  numberLitterBoxes: Int
  numberDogHouses: Int
}

Наличие обеих директив позволяет уменьшить количество переменных, которые должны быть включены в ваш запрос. Например, вы можете запросить:

query ExampleQuery ($isCat: Boolean) {
  pet {
    numberLitterBoxes @include(if: $isCat)
    numberDogHouses @skip(if: $isCat)
  }
}

Если бы у вас была только одна директива или другая, в приведенном выше запросе вам потребовалось бы передать две переменные (isCat и isNotCat).

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