変数によって構造を変更させたい時に使います。これには@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
}
}
}
}