変数によって構造を変更させたい時に使います。これには@includeや@skipというディレクティブがあります。
Directive は適当なフィールドの後に置けます。
@include(if: Boolean)は「引数がtrueな時だけそのフィールドを含める」ことができます。
{
viewer {
id @include(if: true)
}
}この結果は以下の通りです。
{
"data": {
"viewer": {
"id": "MDQ6VXNlcjE1OTAxMDM4"
}
}
}普通にidが含まれています。falseだとどうなるのかも見てみます。
{
viewer {
id @include(if: false)
}
}結果からはidが消えています。
{
"data": {
"viewer": {}
}
}@skip(if: Boolean)は@includeと反対の意味のものです。つまり@includeではfalseのものが@skipではtrueとして置き換えれます。
{
viewer {
id @skip(if: true)
}
}この結果は@include(if: false)のものと同じです。
ちなみに、もし親フィールドを持つフィールドに対してディレクティブを使った場合、ディレクティブの後に{}を置けます。
{
viewer {
repositories(first: 1) @include(if: true) {
edges {
cursor
}
}
}
}