我试图通过从自定义API中提取数据来使用GraphQL(使用Gatsby)。 API包含来自CMS的数据,主要内容是对象数组。该数组中的每个对象都是一个组件,包含标题文本,正文,图像等字段。
在GraphQL中,我查询每个组件及其子字段的所有页面。 GraphQL为每个页面返回正确数量的组件,但是对于每个组件,它返回所有可能的组件和相关的子字段。这意味着我收到了很多null
个对象。
这是我的GraphQL查询:( contentBlock是我们称之为cms中的一个组件)
query Demo {
allPages {
Pages {
title
contentBlocksArray {
contentBlock {
introText{
body
}
}
}
}
}
}
以下是返回的内容:
"allPages": {
"Pages": [
{
"title": "Contact",
"contentBlocksArray": [
{
"contentBlock": {
"introText": {
"body": "Get in touch with us"
}
}
},
{
"contentBlock": {
"introText": null
}
},
{
"contentBlock": {
"introText": null
}
},
{
"contentBlock": {
"introText": null
}
}
]
},
我尝试使用指令,如下所示:
allPages {
Pages {
title
contentBlocksArray {
contentBlock {
introText @skip(if: false) {
body
}
}
}
}
}
}
但这没有做任何事。但是,如果我将其切换为@skip(if: true)
,则结果出乎意料。它将页面中的所有contentBlock
作为空对象返回,即使introText
具有正文副本。理想情况下,我希望仅在introText
不是body
时才会看到null
对象。
由于@skip(if:true)
跳过所有introText
,即使其值为null
,我的结论是GraphQL解释null == true
,但我确定我遗漏了一些内容。
答案 0 :(得分:0)
我认为你误解了skip
指令。在执行查询之前执行/评估该指令。您可以使用它根据变量修改静态查询。静态查询的概念由于各种原因很重要,指令使您有机会在后期进行微调。
相比之下,它不会处理自身返回的数据。您可以在此处了解有关查询指令的更多信息:http://graphql.org/learn/queries/#directives