校验报错

callback is deprecated. Please return a promise instead

Warning: callback is deprecated. Please return a promise instead
原因:
因为新版的Antd使用了 React的hooks,表单中的字段校验方法进行了一些修改;
原来的 callback回调方法改成了返回一个Promise对象

  • return Promise.resolve();
  • return Promise.reject() ; ```jsx function validatorRange(rule, value) { if (isArray(value)) { const { length } = value.filter(Boolean); if(Boolean(length) && length !== 2) {
    1. return Promise.reject('请输入值范围')
    } } return Promise.resolve(); }

  1. <a name="Y5Qok"></a>
  2. ## form4x Promise校验
  3. 适用于 antd 4x
  4. ```jsx
  5. function validatorHost(rule, value, callback) {
  6. console.log(value[1], 'value[1');
  7. const [start, end] = value
  8. const hostReg =
  9. /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))$/;
  10. if (!start && start !== 0) {
  11. return Promise.reject('请选择请求方式');
  12. }
  13. if (!end) {
  14. return Promise.reject('请输入服务器地址');
  15. }
  16. if (!hostReg.test(start)) {
  17. return Promise.reject('请输入正确的服务器地址');
  18. }
  19. return Promise.resolve();
  20. }
  21. <Item
  22. name='host'
  23. label='服务器地址'
  24. rules={[
  25. { required: true, message: '请输入服务器地址', type: 'array' },
  26. {validator: validatorHost}
  27. ]}
  28. >
  29. <InputRange />
  30. </Item>

form 3x callback校验

validator:function(rule, value, callback)
自定义校验,callback 必须被调用
适用于 antd 3x

  1. function validatorHost(rule, value, callback) {
  2. const [start, end] = value
  3. const hostReg =
  4. /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))$/;
  5. if (!start && start !== 0) {
  6. return callback('请选择请求方式');
  7. }
  8. if (!end) {
  9. return callback('请输入服务器地址');
  10. }
  11. if (!hostReg.test(end)) {
  12. return callback('请输入正确的服务器地址');
  13. }
  14. callback()
  15. }
  16. <Item
  17. name='host'
  18. label='服务器地址'
  19. rules={[
  20. { required: true, message: '请输入服务器地址', type: 'array' },
  21. { validator: validatorHost }
  22. ]}
  23. >
  24. <InputRange />
  25. </Item>

validatorDateRnage 时间区间验证

  1. export function validatePickerRange(rule, value, callback) {
  2. if (isArray(value)) {
  3. const { length } = value.filter(Boolean);
  4. if (Boolean(length) && length !== 2) {
  5. callback('请选择开始时间和结束时间');
  6. } else if (length === 2) {
  7. const [start, end] = value;
  8. if (end.isBefore(start)) {
  9. callback('结束时间不能小于开始时间');
  10. }
  11. }
  12. }
  13. callback();
  14. }
  15. <Form.Item label='时间范围'>
  16. {
  17. form.getFieldDecorator('pickerRange', {
  18. initialValue: [],
  19. rules: [{ validator: validatePickerRange }]
  20. })(<PickerRange />)
  21. }
  22. </Form.Item>