Formik + 是的,数组被转换为对象然后验证失败
Formik + Yup, array being converted to object and then failing validation
我有一组具有以下 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 => (...)}/>
为什么会发生这种情况,我该如何避免?
我有一组具有以下 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 => (...)}/>
为什么会发生这种情况,我该如何避免?