《PC端UI框架》Ant Design V4 中表单校验

本文详细介绍了Ant Design中Form组件的rules校验规则,包括len、max、min、required、pattern、validator等,展示了如何在类组件和函数式组件中使用这些规则。还讲解了自定义校验函数的Callback和Promise两种方式,并给出了在Form.Item嵌套时显示必填*号的实现方法。此外,还讨论了通过validateStatus、help、hasFeedback等属性自定义校验反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过 rules 校验规则:

常用的 rules 校验规则:

  1. len:字段长度。
  2. max:最大长度。
  3. min:最小长度。
  4. required:是否必选。
  5. pattern:正则表达式校验。
  6. validator:自定义校验。
  7. message:校验文案。
// 类组件
import React from 'react'
import { Form, Input, Button } from 'antd';
	
class ClassForm extends React.Component {
	// 创建表单实例
	formRef = React.createRef()
	
	handleSave = async () => {
	  // 通过表单实例触发表单验证
	 // 如果校验不通过,将不会继续执行下面的代码;如果校验通过,可获取到表单域的值
	  const values = await this.formRef.current.validateFields()
    }
	
	render(){
	  return (
	    <Form ref={this.formRef}>
	      <Form.Item name="title" rules={[
	      	{required: true, message: '请输入标题'},
	      	{max: 20, message: '最多输入20个字'},
	      ]} >
	       <Input />
	          </Form.Item>
	       <Form.Item>
	          <Button type="primary" onClick={this.handleSave}> 保存</Button>
	       </Form.Item>
	      </Form>
	  )
	}
}
	
export default ClassForm
// 函数式组件
import { Form, Input, Button } from 'antd';
	
const FuncForm = () => {
	const [form] = Form.useForm();
	
	const handleSave = async  () => {
	  // 通过表单实例触发表单验证
	 // 如果校验不通过,将不会继续执行下面的代码;如果校验通过,可获取到表单域的值
	  const values = await form.validateFields()
	}
	return (
	    <Form form={form} >
	      <Form.Item name="title" rules={[{required: true, message: '请输入标题'}]}>
	        <Input />
	      </Form.Item>
	      <Form.Item>
	        <Button type="primary" onClick={handleSave}> 保存</Button>
	      </Form.Item>
	    </Form>
	)
}
	
export default FuncForm
rules 校验规则中的 validator:

rules 校验规则中的 validator 可以自定义校验的规则。

// Callback 方式:rule 是规则;val 是输入的值;callback 是回调函数,如果有字符串,代表校验未通过;如果为空,代表校验通过
handleValidate = (rule, val, callback) => {
	if (!val) {
	    // 校验不通过
       callback('请输入标题')
    }
   
   // 校验通过
   callback()
}

// 或者 Promise 方式:
handleValidate = (rule, val) => {
	if (!val) {
	    // 校验不通过
       return Promise.reject('请输入标题')
    }
   
   // 校验通过
   return Promise.resolve()
}

<Form.Item name="title" rules={[{validator: this.handleValidate}]} >
	  <Input />
</Form.Item>
Form.Item 嵌套时显示必填的 * 号:

Form.Item 嵌套时如果想要显示必填的 * 号,必须给外层的 Form.Item 添加 required 属性。

<Form.Item label='使用截止时间' labelCol={{span: 6}} required>
      <Form.Item
          name='valid_until'
          rules={[{required: true, message: '请选择使用截止时间'}]}
      >
          <DatePicker>
     </Form.Item>
     <span>请确认结束时间,逾期后,将无法使用</span>
</Form.Item>

自定义校验的时机和内容:

通过 validateStatus、help、hasFeedback 等属性,可以不通过 Form 自己定义校验的时机和内容。

<Form>
    <Form.Item
      label="标题"
      name="title"
      extra="我是额外的提示信息extra"
      tooltip="我是配置提示信息tooltip"
      validateStatus="success"  // 校验的状态
      hasFeedback  //校验的图标
      help="我是校验的文案" // 校验的文案
    >
      <Input />
    </Form.Item>
</Form>

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值