Преобразовать функцию, которая возвращает объект на карту этого объекта - PullRequest
1 голос
/ 17 апреля 2019

Требования У меня есть эта функция 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 вместо этого? Кроме того, что я выгляжу чище, я не вижу в этом никакой пользы.

...