【问题标题】:Does GraphQL Interpret null as truthy?GraphQL 是否将 null 解释为真实?
【发布时间】: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


    【解决方案1】:

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

    相反,它不适用于本身返回的数据。您可以在此处了解有关查询指令的更多信息:http://graphql.org/learn/queries/#directives

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2019-09-07
      • 2014-04-11
      • 2019-01-08
      相关资源
      最近更新 更多