Да, условная проверка на основе значения, не являющегося полем - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать схему yup, в которой на основе значения переменной схема меняется незначительно. В моем случае в зависимости от значения prop myCondition мне нужно заполнить поле по мере необходимости. Я хотел бы знать, есть ли лучший способ, которым я могу достичь того же, используя Yup. Вот моя текущая структура кода, которая работает:

// config.js
const COMMON_SCHEMA = {
  str1: yup
    .string()
    .nullable()
    .required('Please input str1'),
  str3: yup
    .string()
    .nullable()
};
const VALIDATION_SCHEMA_1 = yup.object().shape({
  ...COMMON_SCHEMA,
  str2: yup.string().nullable(),
});

const VALIDATION_SCHEMA_2 = yup.object().shape({
  ...COMMON_SCHEMA,
  str2: yup
    .string()
    .nullable()
    .required('Please input str2'),
});

const SCHEMAS = {
  VALIDATION_SCHEMA_1,
  VALIDATION_SCHEMA_2
}
export default SCHEMAS;

Вот как я условно выбираю разные схемы:

// app.js
import SCHEMAS from './config';
...

<Formik
  validationSchema={
    this.props.myCondition === true
      ? SCHEMAS.VALIDATION_SCHEMA_1
      : SCHEMAS.VALIDATION_SCHEMA_2
  }
>
...
</Formik>

Мне кажется, что я могу достичь того, что я делаю выше, в более простой форме кстати с yup. Один из подходов, которые я попробовал, состоял в том, чтобы передать prop myCondition в файл конфигурации и работать с его значением, используя yup.when(), но when работает, только если значение, которое вы хотите использовать, также является частью формы, поэтому я не может достичь того же.

...