【问题标题】:How to add and remove validated fields in yup validationSchema depending on layout condition如何根据布局条件在 yup validationSchema 中添加和删除经过验证的字段
【发布时间】:2021-05-10 02:42:54
【问题描述】:

得到反应项目并从 BE 获取所需输入的列表。创建验证模式对象需要根据条件使用或不使用字段,该字段是否存在于来自 BE 的对象中。 得到了这个解决方案,但不知道行不行?

const validationSchema = yup.object().shape({
...('phone' in fieldsList) && {'phone': yup.string().required('required')},
...('password' in fieldsList) && {'password': yup.string().required('required')},
...('email' in fieldsList) && {'email': yup.string().required('required')},
...('name' in fieldsList) && {'name': yup.string().required('required')},});

【问题讨论】:

    标签: yup


    【解决方案1】:

    我认为这可行

    const validationSchema = yup.object();
    
    if ('phone' in fieldsList) {
      validationSchema.concat(yup.object({ 'phone': yup.string().required('required') }));
    }
    
    if ('password' in fieldsList) {
      validationSchema.concat(yup.object({ 'password': yup.string().required('required') }));
    }
    
    if ('email' in fieldsList) {
      validationSchema.concat(yup.object({ 'email': yup.string().required('required') }));
    }
    
    if ('email' in fieldsList) {
      validationSchema.concat(yup.object({ 'email': yup.string().required('required') }));
    }
    

    如果验证实际上都相同,那么您可以:

    fieldsList.forEach((name) => {
      validationSchema.concat(yup.object({ [name]: yup.string().required('required') }));
    })
    

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2021-12-27
      • 2021-05-15
      • 2020-12-15
      相关资源
      最近更新 更多