【发布时间】:2018-10-22 05:30:07
【问题描述】:
我正在尝试通过从自定义 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),结果是出乎意料的。即使introText 有正文副本,它也会将页面中的所有contentBlock 作为空对象返回。理想情况下,只有当body 不是null 时,我才希望看到introText 对象。
由于@skip(if:true) 跳过了所有introText,即使它的值为null,我的结论是GraphQL 解释了null == true,但我确定我错过了一些东西。
【问题讨论】:
标签: graphql