基于父对象架构的Yup条件验证

时间:2019-11-04 14:21:36

标签: javascript formik yup

我正在使用array()。of方法创建Yup验证架构,我需要根据外部架构对象的值在该数组中设置一些验证规则。如何获得该值的参考?

dataset = [(X_training,Y_training)]

2 个答案:

答案 0 :(得分:3)

来自 Yup 架构外部的变量可以通过使用 when 的回调函数访问。您可以将任何虚拟字段用于第一个参数,因为目的只是为了触发回调。一旦满足条件,then 之后的验证规则将适用。如需更多信息,请参阅 Yup

let outside = true

const schema = Yup.object().shape({
  dummy:Yup.string(),
  terms: Yup.array().of(termsSchema).when("dummy", {
    is: (value) => 
      outside === true,
      then: Yup.number().required("Please provide info")
  }),
});

答案 1 :(得分:0)

非常确定您已经找到了解决方案/解决方法。但是,对于可能会提出解决方案的人来说,这种方法可能会派上用场。

由于您需要嵌套模式的同级字段的值,因此可以使用when创建嵌套模式,例如:

const schema = Yup.object().shape({
  condition: Yup.boolean()
    .required('Error'),
  terms: mixed().when('condition',(value) => {
     // use any logic you need to build/modify the returned schema
     return array().of(termsSchema)
 }),
});

使用.when是current limitation的yup访问嵌套字段,但是这种方法对我有用。我也很好奇您为解决这个问题做了什么。