获取另一个字段的值以在Yup Schema中进行验证

时间:2020-07-23 16:29:54

标签: javascript formik yup

我正在将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,所以无法编译。如何在此验证中获取价格字段的值?

1 个答案:

答案 0 :(得分:4)

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)
      },
    }),

这里是doc
您可以here检查并尝试其工作方式。

希望这会对您有所帮助。