我在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'
light
,dark
和contrastText
根本不保存-它们完全被完全忽略了。
当我在GraphQL中查询数据时,显然我需要检查所有字段,因为我不知道用户填写了哪些可选字段,哪些字段留为空白。这意味着我的查询应类似于:
query MyQuery {
paletteYaml {
primary {
light
main
dark
contrastText
}
}
}
使用上面的示例,其中用户仅填写main
字段,上面的查询将引发错误,因为light
,dark
和contrastText
字段不存在
我为此使用文件收集类型(而不是文件夹收集类型),因此无法设置默认值。无论如何我都可以设置默认值,因为GraphQL和Yaml不接受undefined
作为值-它们只能接受null
或空字符串(""
)作为最佳选择。
即使我手动保存所有字段值都设置为null
或""
的yaml文件,也无法正常工作,因为这会导致其他问题,因为我正在深化合并查询结果与另一个javascript对象。
我只需要让GraphQL为每个空白(缺失)字段返回undefined
,而不是抛出错误,或者根本不返回空白/缺失字段。
这似乎是一个常见问题(在Netlify CMS中处理可选字段),但是文档中没有任何内容。人们如何处理这个问题?