是的验证需要至少一个选择

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

  1. .test 函数,示例
  2. .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"]
    ]
  )
});

现场演示