1

如果我的数组包含某个字符串,我正在尝试以所需的形式创建一个字段。

例如,如果数组 familyMembers 包含“配偶”,则应该需要字段“配偶姓名”。是否可以使用 .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)
  })
4

1 回答 1

0

您可以将第二个参数作为对象传递,而不是将其作为函数传递,该函数从第一个参数(在您的情况下,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
  }),
})

您可以在函数内部执行其他逻辑,还可以返回不同的模式类型。

于 2021-07-26T11:14:10.140 回答