我是GraphQL的新手,并且希望能够在查询中为GraphQL名称使用变量。
我尝试使用标准的$语法,但是没有运气。
工作查询:
query Tryptych($section: SectionsEnum = home) {
enGB: entries(section: [$section], site: "enGB") {
... on Home {
tryptych {
...tryptychFields
}
}
}
}
我想做的事:
query Tryptych($section: SectionsEnum = home, $interface: SomeType = Home) {
enGB: entries(section: [$section], site: "enGB") {
... on $interface {
tryptych {
...tryptychFields
}
}
}
}
参考片段
fragment tryptychFields on TryptychTryptych {
__typename
theme
tagline
firstImageTitle
firstImageContent
firstImageAsset {
url
}
firstImageLink
secondImageTitle
secondImageContent
secondImageAsset {
url
}
secondImageLink
thirdImageTitle
thirdImageContent
thirdImageAsset {
url
}
thirdImageLink
}
在我想要实现的代码段中,我得到了错误消息:
Expected Name, found $
感谢您的帮助。
答案 0 :(得分:0)
变量只能具有一种类型,该类型必须是输入类型(即标量,枚举或输入对象类型),并且只能在需要输入类型的地方(即字段或指令参数)使用)。换句话说,不支持您建议的语法。
如果相同字段可能返回多种类型,则可以使用任意数量的片段来指定按类型设置的选择。当评估字段的类型时,将在运行时确定实际的选择集。例如,如果animal
字段返回Cat
,Dog
和Bird
类型的并集:
query {
animal {
... on Cat {
meows
}
... on Dog {
barks
}
... on Bird {
chirps
}
}
}
您还可以使用@skip
和@include
指令来控制选择哪些字段:
query ($inAHouse: Boolean!, $withAMouse: Boolean!) {
greenEggs @skip(if: $inAHouse)
ham @include(if: $withAMouse)
}
您可以在一个文档中包含多个操作,然后在请求中指定operationName
,以告知服务器要运行哪个操作:
query OperationA {
foo
}
query OperationB {
bar
}