如何根据布局条件在 yup validationSchema 中添加和删除验证字段

问题描述

获得了反应项目并从 BE 获得所需输入的列表。创建验证 Schema 对象需要使用或不使用字段,具体取决于 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')},});

解决方法

我认为这行得通

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') }));
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...