【antd】form表单如何校验区间值
需求:我们需要在表单中填写两个数值,一个最大值一个最小值,但是我们需要在填写的时候去校验最大值和最小值的关系,最大值不能小于最小值,最小值不能大于最大值.如下
解决方案:
1.rules中配置validator 2.通过form.getFieldValue()拿到另一个值进行对比//最小值校验 rules={[ { required: true, message: '请需填写完整', }, { validator: (rule, value, callback) => { let maxPrice = form.getFieldValue('maxPrice'); //拿到最大值 if (value > maxPrice) { callback(`不能大于${maxPrice}`); } else { callback(); } }, },
这里有个问题,即当我最小值已经报错了,但是我不去修改最小值而是去修改最大值,即使满足条件了,最小值的报错还在,校验效果不会更新,如下我先最大值填4,最小值填5,则最小值显示"不能大于4",这时候我再把最大值改成6,这个报错不会消失
解决方案2:
报错之后更新一下校验
rules={[ { required: true, message: '请需填写完整', }, { validator: (rule, value, callback) => { let maxPrice = form.getFieldValue('maxPrice'); if (value > maxPrice) { callback(`不能大于${maxPrice}`); form.validateFields(['maxPrice']); } else { form.validateFields(['maxPrice']); callback(); } }, }, ]}
但是这同样也有个问题,就是他们会同时报错,同时取消报错.
这两种情况下的问题其实也不算问题,可以根据需求选其中一种方案