繁体   English   中英

Formik + 是的,数组被转换为 object,然后验证失败

[英]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: {}}的 object ,然后无法通过 Yup 验证。 当我使用<FieldArray>组件来管理过滤器数组时,我看不到这是怎么发生的。 您可以在源代码中看到这一点,如下所示:

 <FieldArray name="filters" render={outerArrayHelpers => (...)}/>

为什么会发生这种情况,我该如何避免?

事实证明这是一个已经报告的错误,我在这里写了。 它最初在此处报告,并在此处修复,但未包含在 2.1.4 中。 我相信 2.1.5 应该有修复,但同时你可以使用npm install https://pkg.csb.dev/jaredpalmer/formik/commit/157603ab/formik来解决这个问题,它安装了 Formik 的开发版本拉取请求合并。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM