问题描述
获得了反应项目并从 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') }));
})