首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yup多条件验证

Yup多条件验证
EN

Stack Overflow用户
提问于 2020-11-08 00:53:52
回答 1查看 98关注 0票数 0

我有3个字段,默认情况下不是必需的。然而,规则要求,如果提供了3个字段中的任何一个,那么所有3个字段都将是必需的。

示例field_1、field_2和field_3

代码语言:javascript
复制
validataionSchema = Yup.object({
  title: Yup.string().max(10, "Max character exceeded").required("This field is required"),
  field_1: Yup.string().max(32, "Max character exceeded"),
  field_2: Yup.string().max(32, "Max character exceeded"),
  field_3: Yup.string().max(32, "Max character exceeded"),
})

我试过了

代码语言:javascript
复制
validataionSchema = Yup.object({
  title: Yup.string().max(10, "Max character exceeded").required("This field is required"),
  field_1: Yup.string().max(15, "Max character exceeded")
    .when(['field_2', 'field_3'], {
      is: (field_2, field_3) => {
        console.log("* field_2, field_3", field_2, field_3)
        return true
      },
      then: Yup.string().required("This field is required")
    }),
  field_2: Yup.string().max(64, "Max character exceeded")
    .when(['field_1', 'field_3'], {
      is: (field_1, field_3) => {
        console.log("** field_1, field_3", field_1, field_3)
        return true
      },
      then: Yup.string().required("This field is required")
    }),
  field_3: Yup.string().max(64, "Max character exceeded")
    .when(['field_1', 'field_2'], {
      is: (field_1, field_2) => {
        console.log("*** field_1, field_2", field_1, field_2)
        return true
      },
      then: Yup.string().required("This field is required")
    }),
})

但是我得到了Error: Cyclic dependency, node was:"field_2"

EN

回答 1

Stack Overflow用户

发布于 2020-11-08 07:24:10

为了任何可能对解决方案感兴趣的人的利益

代码语言:javascript
复制
  field_1: Yup.string().max(15, "Max character exceeded")
    .test("field_1", "This field is required as part of Fields details", function(value) {
      let f2 = this.resolve(Yup.ref("field_2"));
      let f3 = this.resolve(Yup.ref("field_3"));
      if ((typeof value === "undefined" && typeof f2 === "undefined" && typeof f3 === "undefined") || typeof value !== "undefined") {
        return true
      }
      return false;
    }),
  field_2: Yup.string().max(64, "Max character exceeded")
    .test("field_2", "This field is required as part of Fields details", function(value) {
      let f1 = this.resolve(Yup.ref("field_1"));
      let f3 = this.resolve(Yup.ref("field_3"))
      if ((typeof value === "undefined" && typeof f1 === "undefined" && typeof f3 === "undefined") || typeof value !== "undefined") {
        return true
      }
      return false;
    }),
  field_3: Yup.string().max(64, "Max character exceeded")
    .test("field_3", "This field is required as part of Fields details", function(value) {
      let f1 = this.resolve(Yup.ref("field_1"));
      let f2 = this.resolve(Yup.ref("field_2"));
      if ((typeof value === "undefined" && typeof f1 === "undefined" && typeof f2 === "undefined") || typeof value !== "undefined") {
        return true
      }
      return false;
    }),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64730169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档