GraphQL / Netlify CMS-如果查询字段未定义(不存在),则不会出错

时间:2019-10-30 06:23:41

标签: graphql yaml gatsby netlify-cms

我在Netlify CMS中使用Gatsby,并且在文件集合中有一些可选字段。问题是我无法使用GraphQL检索这些字段,因为如果将其保留为空白,则该字段不存在。

例如,假设我有以下收集文件:

label: "Primary Color",
name: "primary",
file: "data/palette.yaml",
widget: "object",
fields: [
  {
    label: "Light",
    name: "light",
    required: false,
    widget: "string"
  },
  {
    label: "Main",
    name: "main",
    required: false,
    widget: "string"
  },
  {
    label: "Dark",
    name: "dark",
    required: false,
    widget: "string"
  },
  {
    label: "Contrast Text",
    name: "contrastText",
    required: false,
    widget: "string"
  }
]

所有字段都是可选的。因此,假设用户仅输入main的值。然后将数据另存为:

primary:
  main: '#ff0000'

lightdarkcontrastText根本不保存-它们完全被完全忽略了。

当我在GraphQL中查询数据时,显然我需要检查所有字段,因为我不知道用户填写了哪些可选字段,哪些字段留为空白。这意味着我的查询应类似于:

query MyQuery {
  paletteYaml {
    primary {
      light
      main
      dark
      contrastText
    }
  }
}

使用上面的示例,其中用户仅填写main字段,上面的查询将引发错误,因为lightdarkcontrastText字段不存在

我为此使用文件收集类型(而不是文件夹收集类型),因此无法设置默认值。无论如何我都可以设置默认值,因为GraphQL和Yaml不接受undefined作为值-它们只能接受null或空字符串("")作为最佳选择。

即使我手动保存所有字段值都设置为null""的yaml文件,也无法正常工作,因为这会导致其他问题,因为我正在深化合并查询结果与另一个javascript对象。

我只需要让GraphQL为每个空白(缺失)字段返回undefined,而不是抛出错误,或者根本不返回空白/缺失字段。

这似乎是一个常见问题(在Netlify CMS中处理可选字段),但是文档中没有任何内容。人们如何处理这个问题?

0 个答案:

没有答案
相关问题