序言
其实在Ant Design里面,表单的验证最主要是集中在动态校验规则中,但其实目前到手的工作项目中对于表单的实例少之又少。所以在这次的工作中,我也比较花时间的尝试了使用Form的动态校验规则。当然啦,尝试的话,就免不了有坑。顺手在这里总结一下
getFieldDecorator
在动态校验规则中,getFieldDecorator几乎是真个RC-FORM中最重要的一部分了,它存在的意义是用来与表单进行双向绑定。它的使用方式如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18this.props.form.getFieldDecorator(id, options)
// 实例
<Form.Item label="接收手机号码">
{getFieldDecorator(`${this.props.id}`, {
initialValue: value,
rules: [
{
required: true,
max: 11,
pattern: /^1[3456789]\d{9}$/,
validator: this.checkValue,
},
],
})(<Input placeholder="请输入手机号" />)}
</Form.Item>
// 1.在getFieldDecorator 包装的控件,表单控件会自动的添加value。可能这样说是不正确的,因为在getFieldDecorator之后,我们需要使用initialValue来动态绑定这个input的value值
// 2.rules这里面可以定义这个表单的触发时间,长度,必填项,以及提示语等等东西。在后面会讲到这个东西
那么在这个地方,我们抽出五个东西来讲一下,因为我觉得这是表单里面,最重要,也是最常使用到的一部分
pattern 正则
其实pattern是比较简单以及很好理解的,其实他就是一个正则校验而已,虽然没有什么好说,但它是我们规则检验中相当重要的一部分
validateTrigger 校验子节点值的时机
我们在上面代码rules中可以看到,我设置了一个pattern属性,这个的触发默认是在onChange的时候触发的,但是,当我们想要修改这个触发时机时,我们可以通过validateTrigger来设置。例如1
2
3
4
5
6
7
8
9
10
11
12
13
14<Form.Item label="接收手机号码">
{getFieldDecorator(`${this.props.id}`, {
initialValue: value,
rules: [
{
required: true,
max: 11,
pattern: /^1[3456789]\d{9}$/,
validator: this.checkValue,
},
validateTrigger: 'onFocus'/'onBlur'
],
})(<Input placeholder="请输入手机号" />)}
</Form.Item>
validator 用于表单的动态校验
validator接收三个参数,分别是rule(这个代表着当前表单的基本信息,像是id,pattern等),value(当前表单的值),callback(必须被调用,这个后面会说为什么是必须的);例如
1 | checkValue = (rule, value, callback) => { |
this.props.form.validateFields 表单提交调用的方法
这个方法也会传入三个参数,分别是[fieldNames: string[]],[options: object], callback(errors, values)。那么我们又该如何使用他呢,例如1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27submitValue=()=>{
this.props.form.validateFields([name01,name02],(err,value)=>{
// 前面是可以获取到的表单的值,我们一般会将它集成为一个数组,当你不传的时候,默认会获取全部表单内容
// err是报错的信息,会返回一个object对象
// 当点击提交的时候,会循环多次(这里的多次,看你的表单有多少内容)validator这个方法,将所有成功的value回调出来,返回一个object对象
if (!err) {
console.log(value);
...
}
})
}
<Form.Item label="接收手机号码">
{getFieldDecorator(`${this.props.id}`, {
initialValue: value,
rules: [
{
required: true,
max: 11,
pattern: /^1[3456789]\d{9}$/,
validator: this.checkValue,
},
validateTrigger: 'onFocus'/'onBlur'
],
})(<Input placeholder="请输入手机号" />)}
</Form.Item>
<button onClick={ this.submitValue }>提交</button>
getFieldsValue 获取一组输入控件的值,如不传入参数,则获取全部组件的值
这是一个获取表单所有值得一个方法,它可以直接获取当前表单中所有的值,可以传入表单的id,如果不传则返回所有值,它返回也是一个object对象
使用如下1
2// 可以传入数组用来获取想要的表单值,返回的是对象组
const values = this.props.form.getFieldsValue();
扫描二维码,分享此文章