需求:我們需要在表單中填寫兩個數值,一個最大值一個最小值,但是我們需要在填寫的時候去校驗最大值和最小值的關系,最大值不能小於最小值,最小值不能大於最大值.如下

解決方案:
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();
}
},
},
]}
但是這同樣也有個問題,就是他們會同時報錯,同時取消報錯.

這兩種情況下的問題其實也不算問題,可以根據需求選其中一種方案
完整代碼
<Form.Item
name="minPrice"
wrapperCol={{ span: 24 }}
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();
}
},
},
]}
>
<InputNumber
placeholder="請輸入價格"
></InputNumber>
</Form.Item>
<Form.Item
name="maxPrice"
wrapperCol={{ span: 24 }}
rules={[
{
required: true,
message: '請需填寫完整',
},
{
validator: (rule, value, callback) => {
let minPrice = form.getFieldValue('minPrice');
if (value < minPrice) {
callback(`不能小於${minPrice}`);
form.validateFields(['minPrice']);
} else {
form.validateFields(['minPrice']);
callback();
}
},
},
]}
>
<InputNumber
placeholder="請輸入價格"
></InputNumber>
</Form.Item>
