我正在将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`
}),
}),
});
验证模式适用于对象的整个数组,这是预期的行为。
答案 0 :(得分:0)
您可以有两种方法。
1-在新字段中创建行。
您可以使用一个包含所有行的字段,另一个可以仅包含最后一行的字段。这样,您将需要使用setFieldValue
,以便在添加新行时获得最后一行字段,将其推送到包含所有行的字段,然后设置新的最后一行。
这可能会做很多事情,但您可能会受益,因为对行中的最后一项进行了自定义验证(因为它在另一个字段中)。
2-是自定义验证
您可以使用.test
来验证数组,可以遍历数组而忽略最后一个值。
您还可以在该函数内使用yup模式,并使用isValid
或validate
进行检查,因此您无需自己进行测试。
我刚刚制作了一个example,其中有一个字符串列表,您可以验证字符串的长度是否大于或等于3。
它将验证数组中除最后一项之外的所有项。