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

但是這同樣也有個問題,就是他們會同時報錯,同時取消報錯.

 

這兩種情況下的問題其實也不算問題,可以根據需求選其中一種方案
 
 

完整代碼

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

 

 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM