解决Antd表单自定义验证规则失效以及导致所有rule验证失效问题

在项目中,使用Antd自定义表单验证时不生效或者导致所有验证不生效,调试台显示:
验证失效

自定义验证须满足:
  • 自定义验证规则中必须callback一个信息回来,即每种判断情况都要加callback
  • 校验时自定义监听方法的代码不出现异常,不然会导致全部规则失效

我当时就是自定义验证方法里出现了异常,导致自定义以及其他非自定义的所有rule验证都失效了,没有表单的验证错误提示。

自定义规则:handleCheckTpl

rules: [
           {required: true, message: '不能为空!'},
           {validator: this.handleCheckTpl }
       ]

错误写法:

handleCheckTpl = (rule, value, callback) => {
     if (value.file) {
         if (value.file.status === 'removed') {
             callback('请上传合同模板');
         } else {
             callback();
         }
     }else{
         callback();    // callback方法必须要有,否则会报错
     }
};

上方的这个自定义验证规则的代码在提交表单的时候如果不填写对应的值,就会使所有的rule都不会触发,没有验证错误提示。

原因是因为你没有输入这个值,验证validator的时候value.file的时候就会报错,因为此时value是一个undefined。这就导致了所有rule失效


当我们遇到自定义验证失效的时候可以用try{}catch(err){}来捕获异常,代码如下:

正确写法:

handleCheckTpl = (rule, value, callback) => {
   try {
     if (value.file) {
         if (value.file.status === 'removed') {
             callback('请上传合同模板');
         } else {
             callback();
         }
     }else{
         callback(); 
     }
   } catch (err) {
        callback();
     }
};

欢迎访问本文的个人博客链接: https://br-bai.github.io/2020/03/12/解决Ant Design表单自定义验证规则失效以及导致所有rule验证失效问题

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
antd 中,可以通过调用表单组件的 validateFields 方法来触发表单验证。具体的步骤如下: 1. 在表单组件中引入 Form 组件和 useForm 方法: ```javascript import { Form } from 'antd'; import { useForm } from 'antd/lib/form/Form'; ``` 2. 使用 useForm 方法来获取表单实例和表单验证方法: ```javascript const [form] = Form.useForm(); const { validateFields } = form; ``` 3. 在需要触发验证的时机调用 validateFields 方法: ```javascript const handleFormSubmit = () => { validateFields() .then((values) => { // 验证成功,执行提交操作 console.log(values); }) .catch((errorInfo) => { // 验证失败,处理错误信息 console.log(errorInfo); }); }; ``` 在上述代码中,handleFormSubmit 方法用于处理表单提交操作。当调用 validateFields 方法时,会返回一个 Promise 对象,通过 then 方法可以获取到验证成功后的表单值,通过 catch 方法可以处理验证失败时的错误信息。 需要注意的是,在表单组件中,每个需要验证的字段都应该通过 name 属性进行命名,例如: ```javascript <Form form={form}> <Form.Item name="username" label="用户名" rules={[{ required: true, message: '请输入用户名' }]}> <Input /> </Form.Item> {/* 其他表单项 */} <Button onClick={handleFormSubmit}>提交</Button> </Form> ``` 以上是使用 antd 中的 Form 组件来触发表单验证的方法。希望能帮到你!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值