如果我的数组包含某个字符串,我正在尝试在表单中创建一个必填字段。
例如,如果数组 familyMembers 包含“spouse”,则应需要字段“spouseName”。是否可以使用 .when() 函数检查数组中的值?我用它来检查表单其他部分中字符串的值,如下所示:
jobTitle: Yup.string().when("jobStatus", {
is: "employed",
then: Yup.string().required(requiredError)
})
有没有办法做这样的事情:
spouseName: Yup.string().when("familyMembers", {
contains: "spouse",
then: Yup.string().required(requiredError)
})
最佳答案
您可以将第二个参数作为对象传递,而不是将其作为函数传递,该函数从第一个参数接收字段值(在您的情况下是 familyMembers 的值)以及要修改的架构(在您的情况下,添加必填)。
您可以在文档 mixed.when 中了解如何执行此操作(这是最后一个例子)。
例如来自文档
yup.object({
isBig: yup.boolean(),
count: yup.number().when('isBig', (isBig, schema) => {
return isBig ? schema.min(5) : schema.min(0);
}),
});
所以在你的情况下,它应该是这样的
spouseName: Yup.string().when("familyMembers", (familyMembers, schema) => {
// if it includes 'spouse'
return familyMembers.includes('spouse') ?
Yup.string().required(requiredError) : // add required validation
schema; // don't change anything
}),
})
您可以在函数内执行其他逻辑,也可以返回不同的架构类型。
关于validation - 使用 Yup 检查数组是否包含字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68475489/