GraphQL将null解释为真实吗?

时间:2018-05-11 18:40:50

标签: graphql

我试图通过从自定义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,但我确定我遗漏了一些内容。

1 个答案:

答案 0 :(得分:0)

我认为你误解了skip指令。在执行查询之前执行/评估该指令。您可以使用它根据变量修改静态查询。静态查询的概念由于各种原因很重要,指令使您有机会在后期进行微调。

相比之下,它不会处理自身返回的数据。您可以在此处了解有关查询指令的更多信息:http://graphql.org/learn/queries/#directives