有没有一种方法可以跳过yup验证到对象数组中的最后一个对象?

时间:2019-09-10 13:09:24

标签: reactjs formik yup

我正在将formik用于我们的表单实现。当您在上面的行中添加数据时,我们需要追加一个新的字段行。提交表单时,由于新添加的行不符合条件,因此我们收到yup验证错误。请提出任何解决方案,以跳过对新添加的行(最后一行)的验证。

This is the validation schema    

    Yup.object().shape({
        key1: Yup.object({
          key2: Yup.object({
            key3: Yup
              .array()
              .of(Yup.object().shape({
                salary: Yup.object({
                  description: Yup.string().matches(/^([a-zA-Z0-9]+){0,50}$/, 'description is not valid'),
                }),
              })),`enter code here`
          }),
        }),
      });

验证模式适用于对象的整个数组,这是预期的行为。

1 个答案:

答案 0 :(得分:0)

您可以有两种方法。

1-在新字段中创建行。

您可以使用一个包含所有行的字段,另一个可以仅包含最后一行的字段。这样,您将需要使用setFieldValue,以便在添加新行时获得最后一行字段,将其推送到包含所有行的字段,然后设置新的最后一行。

这可能会做很多事情,但您可能会受益,因为对行中的最后一项进行了自定义验证(因为它在另一个字段中)。

2-是自定义验证

您可以使用.test来验证数组,可以遍历数组而忽略最后一个值。

您还可以在该函数内使用yup模式,并使用isValidvalidate进行检查,因此您无需自己进行测试。

编辑:

我刚刚制作了一个example,其中有一个字符串列表,您可以验证字符串的长度是否大于或等于3。

它将验证数组中除最后一项之外的所有项。