首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >yup数组的条件验证

yup数组的条件验证
EN

Stack Overflow用户
提问于 2021-06-07 21:47:03
回答 3查看 551关注 0票数 0

我想在借入寄存器的基础上验证数组,如果借入寄存器为真,则数组应该验证,否则验证。

代码语言:javascript
复制
yup.object().shape({
                
                loan_register: yup.boolean(),
                loans: yup.array()
                    .of(
                        yup.object().shape({
                            bank_name: yup.string().required(),
                            bank_reg_no: yup.string().required(),
                            loan_amount: yup.string().required(),

                        })
                    )

            })
EN

回答 3

Stack Overflow用户

发布于 2021-06-07 21:56:25

编辑:'When loan_register === true,bank_name,bank_reg_no和loan_amount必须是字符串和必填字段。‘

您可以将该需求转换为如下代码(包括使用.when()Yup条件验证 ):

代码语言:javascript
复制
    const validationSchema = yup.object().shape({        
         loan_register: yup.boolean(),
         loans: yup.array()
        .when('loan_register', {
            is: true,
            then: yup.of(
                yup.object().shape({
                    bank_name: yup.string().required(),
                    bank_reg_no: yup.string().required(),
                    loan_amount: yup.string().required(),
                })
             )
        })
    })
票数 0
EN

Stack Overflow用户

发布于 2021-06-07 22:14:42

我认为你会想要利用.when()。通过提供基于其他属性值的条件验证检查,这恰好实现了您想要的结果。

它有一种更明确的方法,您可以在其中添加

代码语言:javascript
复制
.when('loan_register', {is: true, then: /* yup schema */ })

我相信这个变化看起来像是

代码语言:javascript
复制
yup.object().shape({
    loan_register: yup.boolean(),
    loans: yup.array()
        .when('loan_register', {
            is: true,
            then: yup.of(
                yup.object().shape({
                    bank_name: yup.string().required(),
                    bank_reg_no: yup.string().required(),
                    loan_amount: yup.string().required(),
                })
            )
        })
})
票数 0
EN

Stack Overflow用户

发布于 2021-09-21 10:15:14

of不是yup导出成员的原因是yup首先需要知道数据的类型。只有知道of的类型后,才能使用它。

例如:array().of()string().oneOf(),e.t.c

因此,在您的情况下,您需要提供数据类型,它将解决您的问题。

代码语言:javascript
复制
const validationSchema = yup.object({     
             loan_register: yup.boolean(),
             loans: yup.array().when('loan_register', {
                          is: true,
                          then: yup.array().of(
                                  yup.object({
                                      bank_name: yup.string().required(),
                                      bank_reg_no:yup.string().required(),
                                      loan_amount:yup.string().required(),
                               }))
            })
        })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67872868

复制
相关文章

相似问题

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