Получить значение другого поля для проверки в Yup Schema

Я использую Formik с Yup для проверки и TypeScript

У меня есть поле, которое нужно проверить на основе значения другого поля.

Первое поле называется ценой, а второе - советами. Максимальное значение чаевых составляет 10% от введенной цены.

Я попытался создать для этого проверку, используя следующее:

   tips: yup.number()
    .min(0, `Minimum tip is $0`)
    .max( parseFloat(yup.ref('price'))* 0.1, "Maximum tip is 10% of the price.");

однако это не компилируется, потому что yup.ref возвращает Ref. Как я могу получить значение поля цены в этой проверке?


person Michael Edwards    schedule 23.07.2020    source источник
comment
yup.reach('price') помогает? Из того, что я прочитал здесь, вы можете получить доступ к схемам объектов, используя reach   -  person David Buzatu    schedule 27.07.2020


Ответы (1)


number.max не может ссылаться на другое поле и вычислять с ним при проверке.

Если вы хотите это сделать, вам нужно реализовать собственную схему с mixed.test.
Вот пример.

  tips: number()
    .min(0, `Minimum tip is $0`)
    .test({
      name: 'max',
      exclusive: false,
      params: { },
      message: '${path} must be less than 10% of the price',
      test: function (value) {
          // You can access the price field with `this.parent`.
          return value <= parseFloat(this.parent.price * 0.1)
      },
    }),

Вот документ.
Вы можете проверить и попробовать, как это работает здесь.

Я надеюсь, что это поможет вам.

person tatsuya kanemoto    schedule 29.07.2020