4

我将 Gatsby 与 Netlify CMS 一起使用,并且在文件集合中有一些可选字段。问题是我无法使用 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'

light,dark并且contrastText根本没有保存 - 它们完全被排除在外。

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

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

使用上面用户只填写main字段的例子,上面的查询会抛出一个错误lightdark并且contrastText字段不存在。

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

即使我手动保存 yaml 文件并将所有字段值设置为nullor "",这也不起作用,因为它会导致其他问题,因为我正在将查询结果与另一个 javascript 对象深度合并。

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

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

4

0 回答 0