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

时间:2020-07-08 09:19:54

标签: javascript reactjs formik yup

我有一个具有以下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 => (...)}/>

为什么会这样,我该如何避免呢?

1 个答案:

答案 0 :(得分:0)

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