React+antd表单校验

React使用ant-design进行Form表单校验问题

关键字:React、Form表单校验、antd V4.18.5

V4版本最新校验规则写法

出现的错误

v4版本的antd在使用validator去设置自定义校验规格会提示警告:callback已经弃用

在这里插入图片描述

// 编辑最大值规则
  const maxValidators = (_, value, callback) => {
    if (maxCount >= minCount || minCount === null) {
      // return Promise.resolve('')
      callback && callback('')
    } else {
      // return Promise.reject('不得小于最小值')
      callback && callback('不得小于最小值')
    }
  };

解决方案1

校验时返回Promise对象
  // 编辑最大值规则
  const maxValidators = (_, value, callback) => {
    if (maxCount >= minCount || minCount === null) {
      return Promise.resolve('')
    } else {
      return Promise.reject('不得小于最小值')
    }
  };

  // 编辑最小值规则
  const minValidators = (_, value) => {
    if (minCount <= maxCount || maxCount === null) {
      return Promise.resolve('')
    } else {
      return Promise.reject('不得大于最大值')
    }
  };
	<Form.Item
	  name="minValue"
	  rules={[
	    { required: true, message: '请设置最小值' },
	    {
	      validator: minValidators
	    }
	  ]}
	  initialValue={reShowData ? reShowData.minValue : null}
	>
	  <InputNumber
	    min={0}
	    max={100}
	    onChange={(value) => {
	      console.log('minOnChange', value);
	      setMinCount(value);
	    }}
	    formatter={(value) => `${value}%`}
	    parser={(value) => value.replace('%', '')}
	  />
	</Form.Item>

解决方案2

由于你的 validator 有错误导致 callback 没有执行到。你可以选择通过 async 返回一个 promise 或者使用 try…catch 进行错误捕获;

——来自antd官网

validator: async (rule, value) => {
  throw new Error('Something wrong!');
}

// or

validator(rule, value, callback) => {
  try {
    throw new Error('Something wrong!');
  } catch (err) {
    callback(err);
  }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值