Требования
У меня есть эта функция getValidationSchema`. Моя задача заключается в преобразовании функции, которая вызывает ее, в карту объекта.
Что-то похожее на validationSchema[EDIT_INFO] = someSchema
, и вызовите это со всеми моими сопоставлениями вместо функции.
export const validationSchemas = {
ADD_USER: Yup.object().shape({
username: Yup.string('Provide a username').required('Username is required'),
email: Yup.string().email('Provide a valid email address'),
password: Yup.string('Provide a password').required('Password is required'),
confirmPassword: Yup.string('Provide your password again')
.required('Password confirmation is required')
.oneOf([Yup.ref('password')], 'Passwords do not match'),
group: Yup.string('Please select a group').required('Group is required')
}),
EDIT_INFO: Yup.object().shape({
username: Yup.string('Provide a username').required('Username is required'),
email: Yup.string().email('Provide a valid email address'),
group: Yup.string('Please select a group').required('Group is required')
}),
EDIT_PASSWORD: Yup.object().shape({
password: Yup.string('Provide a password').required('Password is required'),
confirmPassword: Yup.string('Provide your password again')
.required('Password confirmation is required')
.oneOf([Yup.ref('password')], 'Passwords do not match')
})
};
Вот функция, которую я имел до сих пор:
const { mode } = this.props;
if (mode === ActionMode.EDIT_INFO) {
return validationSchemas.EDIT_INFO;
}
if (mode === ActionMode.EDIT_PASSWORD) {
return validationSchemas.EDIT_PASSWORD;
}
return validationSchemas.ADD_USER;
};
Так я вызываю функцию до сих пор.
validationSchema={this.getValidationSchemas}
И вот что я сделал до сих пор:
const mapValidationSchema: any;
validationSchemas[(validationSchemas.EDIT_PASSWORD, validationSchemas.EDIT_INFO,
validationSchemas.ADD_USER)] = this.mapValidationSchema;
validationSchema = {this.mapValidationSchema}
Я явно что-то не так делаю, так как получаю несколько ошибок и проверка формы не работает. Обратите внимание, что форма находится в React, и TS.
Кроме того, меня попросили сделать это, но можете ли вы объяснить мне, почему это лучше, чем функция с оператором if вместо этого? Кроме того, что я выгляжу чище, я не вижу в этом никакой пользы.