Как проверить одно поле против другого с помощью Yup? - PullRequest
1 голос
/ 21 июня 2019

Я настраиваю форму с двумя полями;Начальный месяц и конец месяца.

Начальный месяц и конечный месяц просто представлены целыми числами (0-11) для соответствующих месяцев.Мне нужна проверка, чтобы убедиться, что конечный месяц наступает после начального месяца (т. Е. Целое число для конечного месяца больше).

Я рассматривал другие подобные проблемы несколько лет назад, но yup, похоже, обновился досделать их бесполезными.Я попробовал приведенный ниже код с несколькими вариантами.

У меня также возникают трудности с проверкой конечного месяца в виде числа (.number() - я предполагаю, что мне, возможно, придется сделать это в тестовой функции.

let schema = yup.object().shape({
  startMonth: yup
    .number()
    .required()
    .positive()
    .integer(),
  endMonth: Yup.string().test(
  "End Month Validation",
  "error message",
  value => {
    return value > startMonth;
  }
)
.number()
.required()
.positive()
.integer(),
});

Ошибки: строка 102: 'startMonth' не определен no-undef

1 Ответ

2 голосов
/ 21 июня 2019

Другой подход заключается в использовании .ref() и .moreThan() для выполнения этой логики проверки.

Что-то вроде следующего должно достичь того, что вам нужно:

let schema = Yup.object().shape({
  startMonth: Yup
    .number()
    .required()
    .positive()
    .integer(),
  endMonth: Yup.number() /* Remove .string() */
    .required()
    .positive()
    /* Reference startMonth field in validating endMonth value */
    .moreThan(Yup.ref('startMonth'), "End month must come after start month")
    .integer(),
});

schema.validate({ startMonth : 1, endMonth : 2 })  // Okay!
schema.validate({ startMonth : 11, endMonth : 2 }) // Throws exception

Рабочий пример: , см. Этот код . Надеюсь, это поможет!

...