与另一个字段比较:yup如何将一个字段的值与另一个字段进行比较?

17

我有

StartIntensity: yup.number(),
EndIntensity: yup
    .number()
    .when(
        "StartIntensity",
        (StartIntensity: number, schema: any) => {
            return !!StartIntensity
                ? schema.moreThan(
                        StartIntensity,
                        "Max should be > min"
                  )
                : schema;
        }
    ),

但我需要类似那样的东西

StartIntensity: yup.number(),
EndIntensity: yup
    .number()
    .when(
        "StartIntensity, EndIntensity",
        (StartIntensity: number, EndIntensity: number, schema: any) => {
            return !!StartIntensity && StartIntensity !== EndIntensity
                ? schema.moreThan(
                        StartIntensity,
                        "Max should be > min"
                  )
                : schema;
        }
    ),

但是上面的代码不能正常工作。有没有其他可能使其工作或执行此验证的其他方法?


但是上面的代码不能正常工作,它出了什么问题?你期望它做什么?发生了什么事情? - Derek Pollard
@Derek Pollard 验证停止完全工作 - Heidel
1
如果你让上面的代码运行,我认为你最终会遇到“循环依赖”的问题。 - Antoni4
1个回答

46
在你的情况下,.when() 的第一个参数应该是一个键(key)的数组:
StartIntensity: yup.number(),
EndIntensity: yup
    .number()
    .when(
        ["StartIntensity", "EndIntensity"],
        (StartIntensity: number, EndIntensity: number, schema: any) => {
            return !!StartIntensity && StartIntensity !== EndIntensity
                ? schema.moreThan(
                        StartIntensity,
                        "Max should be > min"
                  )
                : schema;
        }
    ),

keys: string | Array(字符串或数组类型)

https://github.com/jquense/yup#mixedwhenkeys-string--arraystring-builder-object--value-schema-schema-schema

如果上述代码抛出“循环依赖”错误(我认为它会这样做),请尝试以下代码:

StartIntensity: yup.number(),
EndIntensity: yup
    .number()
    .when('StartIntensity', (StartIntensity, schema) => {
      return schema.test({
        test: EndIntensity => !!StartIntensity && EndIntensity > StartIntensity,
        message: "Max should be > min"
      })
    }),

或者您也可以使用 ref

StartIntensity: yup.number(),
EndIntensity: yup
    .number()
    .moreThan(yup.ref('StartIntensity'), "Max should be > min")

8
@Heidel,这个答案是否对您有帮助?如果有,请接受它 :) - Freeman
请告诉我如何编写带有最小值的消息……例如,如果最小值为5且此验证不正确,则在消息中写入最小值。 - Hamidreza Ghanbari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接