在使用mapPropsToFields渲染表单数据的时候,发现表单的校验rules的校验实现了,但是控制台还是会打印出校验
<Form.Item {...formItemLayoutWithOutLabel} key={'serialNumber'}>
{getFieldDecorator('serialNumber', {
initialValue: modelName === 'qsComponents'? (param.default?param.serialNumber:''):serialNumber,
rules: [
{
required: param.required,
message: '请输入手机号码',
},
{
max: 12,
message: '长度不能超过12个字符',
},
{
pattern: /^[1][3,4,5,7,8][0-9]{9}$/,
message: '请输入正确格式的手机号码',
},
],
})(<Input placeholder="请输入手机号码" />)}
</Form.Item>
mapPropsToFields(props) {
const param = props.componentParam;
const {modelName} = props;
const {serialNumber} = props.userInput;
return {
"serialNumber": Form.createFormField({
"value": modelName === 'qsComponents' ? (param.default ? param.serialNumber : '') : serialNumber,
}),
}
}
原因是
查阅很多资料发现,官网有一句话
所以就是错误需要你自己处理,目前我只能这样处理,虽然解决了问题,但是代码是否不优雅......
mapPropsToFields(props) {
const param = props.componentParam;
const {modelName} = props;
const {serialNumber} = props.userInput;
const value = modelName === 'qsComponents' ? (param.default ? param.serialNumber : '') : serialNumber;
let error = [];
if(param.default){
if(value){
console.log('true',value);
if(value.length > 11){
let e ={
max: 11,
message: '长度不能超过12个字符',
};
error.push(e);
}else if(!(/^[1][3,4,5,7,8][0-9]{9}$/.test(value))){
let e = {
pattern: /^[1][3,4,5,7,8][0-9]{9}$/,
message: '请输入正确格式的手机号码',
};
error.push(e);
}
}else {
let e = {
required: param.required,
message: '请输入手机号码',
};
error.push(e);
}
}
return {
"serialNumber": Form.createFormField({
"value": modelName === 'qsComponents' ? (param.default ? param.serialNumber : '') : serialNumber,
"name": "serialNumber",
"touched": true,
"dirty": false,
"errors": error.length>0?error:null,
"validating": false
}),
}
}
注意errors是个数组,需要传数组,而且所有的参数都必须传,不然不生效