是的验证需要至少一个选择
Yup validation requiring at least one selection
我试图要求在表单中选中两个复选框之一。根据文档,以下内容似乎不起作用:
yearGroups: yup.object().shape({
primary: yup.bool().when('yearGroups.primary', {
is: false,
then: yup
.bool()
.oneOf([true], '')
.required()
}),
secondary: yup.bool().when('yearGroups.secondary', {
is: false,
then: yup
.bool()
.oneOf([true], '')
.required()
}),
}),
这是某种重复,但这里有解决方案:使用 .test()
函数或创建您自己的方法 - .addMethod
.test
函数,示例
- .addMethod 函数,示例 here
我在我的代码中使用 .addMethod
,它更灵活,您可以定义您需要的所有参数。一旦你在文件中定义它,你可以在任何你需要的地方调用它。
试试这个。看解释here:
const schema = yup.object().shape({
yearGroups: yup.object().shape(
{
primary: yup.bool().when("secondary", {
is: (secondary) => !secondary,
then: yup.bool().oneOf([true], "At least one needs to be checked")
}),
secondary: yup.bool().when("primary", {
is: (primary) => !primary,
then: yup.bool().oneOf([true], "At least one needs to be checked")
})
},
[
["primary", "secondary"],
["secondary", "primary"]
]
)
});
现场演示
我试图要求在表单中选中两个复选框之一。根据文档,以下内容似乎不起作用:
yearGroups: yup.object().shape({
primary: yup.bool().when('yearGroups.primary', {
is: false,
then: yup
.bool()
.oneOf([true], '')
.required()
}),
secondary: yup.bool().when('yearGroups.secondary', {
is: false,
then: yup
.bool()
.oneOf([true], '')
.required()
}),
}),
这是某种重复,但这里有解决方案:使用 .test()
函数或创建您自己的方法 - .addMethod
.test
函数,示例- .addMethod 函数,示例 here
我在我的代码中使用 .addMethod
,它更灵活,您可以定义您需要的所有参数。一旦你在文件中定义它,你可以在任何你需要的地方调用它。
试试这个。看解释here:
const schema = yup.object().shape({
yearGroups: yup.object().shape(
{
primary: yup.bool().when("secondary", {
is: (secondary) => !secondary,
then: yup.bool().oneOf([true], "At least one needs to be checked")
}),
secondary: yup.bool().when("primary", {
is: (primary) => !primary,
then: yup.bool().oneOf([true], "At least one needs to be checked")
})
},
[
["primary", "secondary"],
["secondary", "primary"]
]
)
});