我将 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
字段的例子,上面的查询会抛出一个错误light
,dark
并且contrastText
字段不存在。
我为此使用了文件集合类型(而不是文件夹集合类型),因此我无法设置默认值。无论如何我是否可以设置默认值都没有关系,因为 GraphQL 和 Yaml 不接受undefined
作为值 - 它们只能接受null
空字符串 ( ""
) 作为最佳选择。
即使我手动保存 yaml 文件并将所有字段值设置为null
or ""
,这也不起作用,因为它会导致其他问题,因为我正在将查询结果与另一个 javascript 对象深度合并。
我只需要undefined
为每个空白(缺失)字段返回 GraphQL,而不是抛出错误,或者根本不返回空白/缺失字段。
这似乎是一个常见问题(处理 Netlify CMS 中的可选字段),但文档中没有关于它的任何内容。人们如何处理这个问题?