我有一个具有以下Yup模式的过滤器数组:
const schema = Yup.object().shape({
filters: Yup.array().strict().of(
Yup.array().strict().of(
Yup.object().shape({
// This isn't important
})
)
)
});
当我打开页面时,表单具有以下数据(即formik.value
的值):
{
"filters": [
[
{
"type": "samplemeta",
"cmp": "lt",
"key": "fastqc__%GC",
"value": [
"50"
]
}
]
],
}
现在由于某种原因,验证失败并显示此错误(即formik.errors
的值):
{
"filters": [
"filters[0] must be a `array` type, but the final value was: `{\n \"0\": {\n \"type\": \"\\\"samplemeta\\\"\",\n \"cmp\": \"\\\"lt\\\"\",\n \"key\": \"\\\"fastqc__%GC\\\"\",\n \"value\": [\n \"\\\"50\\\"\"\n ]\n }\n}`."
]
}
因此,即使实际数据显然有效,我的形状为[{}]
的数组也被转换为形状为{0: {}}
的对象,从而使Yup验证失败。当我使用<FieldArray>
组件来管理过滤器数组时,我看不到这是怎么回事。您可以在源代码中看到此here,如下所示:
<FieldArray name="filters" render={outerArrayHelpers => (...)}/>
为什么会这样,我该如何避免呢?