【问题标题】:yup: compare field itself with another field是的:将字段本身与另一个字段进行比较
【发布时间】:2019-10-08 01:27:37
【问题描述】:

我有

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 验证完全停止工作
  • 我认为如果你让上面的代码工作,你最终会得到“循环依赖”

标签: javascript yup


【解决方案1】:

在您的情况下,.when() 的第一个参数应该是一个键数组:

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

键:字符串 |数组

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")

【讨论】:

  • @Heidel 这个答案对你有帮助吗?如果是这样,请接受它:)
  • 请告诉我如何用最小值编写消息....例如,如果 min vlaue 为 5 并且此验证不正确,我在消息中写入最小值
猜你喜欢
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 2015-09-08
  • 2018-11-05
相关资源
最近更新 更多