表单提交的时候使用form.validateFields((err,values)=>{}),如果errfalse则所有都通过了表单校验,values是定义表单项时的对应名称和值的对象。
//添加数据的确定按钮
function onOk(){
const {form} = formRef.current.props;
form.validateFields((err,values)=>{
console.log(values,'values')
if(err) return false;
});
}
如果我们的表单中出现滚动条,在点击提交的时候需要将未通过校验的的表单项移动到视图中,可以使用validateFieldsAndScroll:
//添加数据的确定按钮
function onOk(){
const {form} = formRef.current.props;
form.validateFieldsAndScroll((err,values)=>{
console.log(values,'values')
if(err) return false;
})
}
效果如图:
如上图填完可视区域后 ,直接点击确定,那么视图会滚动到未填写的form项上。
//点击重置
onReset(){
//这里是重置表单中每一项的数据
this.props.form.resetFields();
//如果只想重置某一项则传入一个数组即可,如下只重置loginname,和loginpass项的数据
//this.props.form.resetFields(['loginname','loginpass']);
}
这个默认值在用户改变后当点击重置按钮时恢复初始值initialValue
{getFieldDecorator('userstatus',{
rules:[{required:true,message:'必选'}],
initialValue:'1'
})(
)}
{getFieldDecorator('userlevel',{
rules:[{required:true,message:'请输入用户级别'}],
initialValue:50
})(
)}
通过使用setFieldsValue方法进行更新表单的某一项值,传入一个对象,对象的key必须是表单项里面已经存在的。这里通常用在修改数据的时候,填充表单项该数据的各个信息。
constructor(props){
super(props);
this.onReset = this.onReset.bind(this);
this.initFieldsValue={
'userlevel':30,
'userstatus':'1'
}
}
componentDidMount(){
this.props.form.setFieldsValue(this.initFieldsValue);
}
validateFirst:当某一规则校验不通过时,是否停止剩下的规则的校验
例如我们校验确认密码时有三个规则:
如果不设置validateFirst:true那么这三个规则都不符合时会同时出现所有的错位信息,也会导致布局挤开需要的空间如:
加上以后,第一条校验不通过就会停止校验解决上面的问题,也可以让用户逐步解决问题:
这个时候还需要调整你的校验顺序,自己决定那一条优先校验,如上面这里其实应该优先校验密码是否一致。
代码调整校验顺序顺序后:
{getFieldDecorator('cfmloginpass', {
rules: [{ required: true, message: '请输入密码' },
{validator:(rules,value,callback)=>
{this.handleCfmPwd(rules,value,callback)}},
{max:20,message:'不得超过20位'},
pattern('pwd')
],
validateFirst:true
})()}
与之相关的:
antd form使用pattern和validator自定义校验规则
antd自定义校验规则校验两次密码是否一致