Я пытаюсь создать схему 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
работает, только если значение, которое вы хотите использовать, также является частью формы, поэтому я не может достичь того же.