首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yup嵌套模式验证

Yup嵌套模式验证
EN

Stack Overflow用户
提问于 2020-05-23 03:47:29
回答 1查看 13.9K关注 0票数 12

我试图在用户选择的Select选项上有条件地验证一个对象,问题是我呈现了一个货币列表,并且在尝试将其设置为必填字段时遇到了巨大的困难,因为我必须首先传入一个空对象。

我的代码栈是React、Formik和Yup (都是最近的版本)。

对象架构

代码语言:javascript
复制
category: 'A',
details: {
   name: '',
   price: 0,
   stock: 0,
   currency: {
      label: '',
      code: '',
      symbol: '',
      alpha_2: '',
    }
}

Yup模式

代码语言:javascript
复制
category: Yup.string().required('You must pick a category'),
details: Yup.object().when('category', {
  is: 'A',
  then: Yup.object({
       label: Yup.string().required(`Select the currency you're retailing in`),
        code: Yup.string().required(`Select the currency you're retailing in`),
        symbol: Yup.string().required(`Select the currency you're retailing in`),
        alpha_2: Yup.string().required(`Select the currency you're retailing in`),
    }),
})

使用上面的代码,表单通过了验证,并且currency对象有一个空值列表'',这是一个不希望出现的结果。

如何进行模式触发器验证?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-23 19:44:53

您没有针对存储label/code/symbol/alpha_2details.currency进行验证。在schema.details中,then应该由一个Yup.object组成,该Yup.object具有另一个存储在currency属性中,然后为label/code/symbol/alpha_2定义您想要的验证。

示例:

代码语言:javascript
复制
const yup = require("yup");

const schema = yup.object({
    category: yup.string().required('You must pick a category'),
    details: yup.object().when('category', {
        is: 'A',
        then: yup.object({
            currency: yup.object({
                label: yup.string().required(`[1] Select the currency you're retailing in`),
                code: yup.string().required(`[2] Select the currency you're retailing in`),
                symbol: yup.string().required(`[3] Select the currency you're retailing in`),
                alpha_2: yup.string().required(`[4] Select the currency you're retailing in`),
            })
        }),
    })
})

let state = {
    category: 'A',
    details: {
        name: '',
        price: 0,
        stock: 0,
        currency: {
            label: 'a',
            code: 'b',
            symbol: 'c',
            alpha_2: 'd',
        }
    }
}

schema.validate(state).then(console.log).catch(err => console.log(err))
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61962784

复制
相关文章

相似问题

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