问题描述
我想使用我的架构在其他字段的基础上验证一个字段。就像,如果 carType 是“SUV”,最大“noOfPassengers”应该是 6 否则 4。但是,它不能验证这种情况,我既无法调试,也无法在控制台中收到任何错误。
const validationSchema = yup.object().shape({
location: yup
.string()
.required('location is required'),destination: yup
.string()
.required('Destination is required'),carType: yup
.string(),noOfPassengers: yup
.string()
.when('carType',{
is: value => value && value === "SUV",then: yup
.string()
.max(6,'Max 6 passengers are required'),otherwise: yup
.string()
.max(4,'Max 4 passengers are required'),}),});
解决方法
您将 noOfPassengers 的值作为字符串进行比较,而它应该是这样的数字:
Yup.object().shape({
location: Yup
.string()
.required('location is required'),destination: Yup
.string()
.required('Destination is required'),carType: Yup
.string(),noOfPassengers: Yup
.number()
.when('carType',{
is: value => value && value === "SUV",then: Yup
.number()
.max(6,'Max 6 passengers are required'),otherwise: Yup
.number()
.max(4,'Max 4 passengers are required'),}),});
如果你运行这个,你应该得到验证错误。你的逻辑条件也有缺陷。你也应该解决这个问题,但这不是这个答案的范围。
问题是
Yup.string()
应该是 Yup.number()
,因为您随后在 max
中比较它。