美文网首页
React + Ant Design Form 表单自定义校验

React + Ant Design Form 表单自定义校验

作者: IT姑凉 | 来源:发表于2021-04-26 09:01 被阅读0次

    IT姑凉公众号原创文章,如需转载请注明出处,谢谢~
    https://mp.weixin.qq.com/s/-Iyc6RQB_vH-NcvuO5nNrw

    Ant DesignForm 组件自定义校验

    表单校验

    将 validator 放在 rules 的数组中

    <Form.Item  label="姓名">
      {getFieldDecorator('userName', {
        rules: [{
            required: true,
            message: '请输入姓名!',
          },{
            validator: this.checkVal
          }]
      })(<Input placeholder="请输入姓名"/>)}
    </Form.Item>
    

    自定义校验方法

    调用方法:当 value 在变化的时候请求接口,根据接口返回的值,调用 callback 回调函数

    checkVal = (rule, value, callback) => {
      if (!value) {
        callback();
      }
      const { dispatch } = this.props;
      dispatch({
        type: 'xxxx/xxxxxx',
        payload: value,
      }).then(function (res) {
        if ("满足条件") {
          callback();
        } else {
          callback("条件不满足的提示");
        }
      });
    }
    

    方法由3个参数组成,rule 是规则,value 是你输入的值,callback 是个回调函数

    不管 callback 是否返回提示内容,都要写 callback 这个函数,不返回内容需要写个空的 callback() ,否则表单校验通不过

    新版的 antd 表单字段校验方法原来的回调方法改成返回一个 Promise 对象

    const checkVal = (_, val) => {
      if ("满足条件") {
        return Promise.resolve();
      } else {
        return Promise.reject("条件不满足的提示");
      }
    };
    

    debounce防抖

    由于校验需要调用接口,为减少请求次数,需要自己写个debounce防抖方法

    防抖就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间

    debounce = (fn, delay=500) => {
      return (...rest) => { 
        let args = rest;
        if (this.timerId) clearTimeout(this.timerId);
        this.timerId = setTimeout(() => {
          fn.apply(this, args)
        }, delay)
      }
    }
    

    修改表单校验调用方法

    <Form.Item  label="姓名">
      {getFieldDecorator('userName', {
        rules: [{
            required: true,
            message: '请输入姓名!',
          },{
            validator: this.debounce(this.checkVal, 500)
          }]
      })(<Input placeholder="请输入姓名"/>)}
    </Form.Item>
    

    相关文章

      网友评论

          本文标题:React + Ant Design Form 表单自定义校验

          本文链接:https://www.haomeiwen.com/subject/udgxlltx.html