【发布时间】:2020-08-22 23:30:12
【问题描述】:
我正在使用 Yup.js 来验证一些表单字段。
我有两个整数字段,Year Built 和 Year Renovated。
Year Built 是必填字段,Year Renovated 不是。
翻新年份可以留空,但是如果有值它应该大于建造年份(因为翻新肯定必须在建造日期之后发生)。
我相信我需要使用 yup 的 ref() 以及 yup 的 when() 功能。我尝试了以下方法:
让 currentYear = new Date().getFullYear();
yup.object().shape({
yearBuilt : yup.number().integer().min(1700).max(currentYear+1).required(),
yearRenovated : yup.number().integer().when(
'$yearRenovated', (yearRenovated, schema)=>{
return yearRenovated > 0 ?
schema.min(yup.ref('yearBuilt')).max(currentYear+1) :
schema.transform(emptyStringToNull).nullable()
}
)
})
* 转换函数emptyStringToNull 只检查是否value === '',如果是则返回null。
上面确实允许空值,以及正确检查整数。但是它没有正确评估yearRenovated > yearBuilt。如何正确检查yearRenovated 是否不为空,是否大于yearBuilt?
非常感谢大家的帮助。
【问题讨论】:
标签: reactjs validation yup