ant design mapPropsToFields自动校验失效

本文详细探讨了在Ant Design中使用mapPropsToFields渲染表单数据时遇到的校验规则问题,并提供了一种解决方案,通过自定义错误处理确保表单校验的准确性。

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

在使用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是个数组,需要传数组,而且所有的参数都必须传,不然不生效

### 回答1: Ant Design Vue 组件支持使用 `rules` 属性对表单进行校验校验规则是一个对象数组,每个对象包含一个验证规则,如: ``` rules: [ { required: true, message: '请输入内容', }, { pattern: /^[a-zA-Z0-9]+$/, message: '只能是字母或数字', }, ], ``` 在表单元素上添加 `:rules="rules"` 即可启用校验。 详情请参考 Ant Design Vue 官方文档:https://vue.ant.design/components/form-cn/ ### 回答2: Ant Design Vue是一个基于Vue.js的UI组件库,它提供了许多优秀的表单校验功能,可以方便地用于我们的项目开发中。下面我们来详细介绍一下Ant Design Vue的表单校验。 1. 校验规则 首先我们需要在表单项中设置校验规则。Ant Design Vue提供了丰富的校验规则,例如:required、email、url、number等。我们只需要在对应的表单项上添加对应的校验规则即可。 例如,下面是一个包含邮箱校验规则的表单: ```html <a-form-model :model="formData"> <a-form-model-item label="邮箱" prop="email"> <a-input v-model="formData.email" /> </a-form-model-item> <a-form-model-item> <a-button type="primary" @click="handleSubmit">提交</a-button> </a-form-model-item> </a-form-model> ``` ```javascript export default { data() { return { formData: { email: '' }, rules: { email: [{ required: true, message: '邮箱不能为空', trigger: 'blur' }, { type: 'email', message: '请输入正确的邮箱格式', trigger: ['blur', 'change'] }] } } }, methods: { handleSubmit() { this.$refs.form.validate(valid => { if(valid) { //表单校验通过,执行提交操作 } else { //表单校验不通过,提示错误信息 } }) } } } ``` 2. 自定义校验规则 除了Ant Design Vue提供的已有校验规则之外,我们还可以自定义校验规则。例如,下面是一个自定义校验规则的表单: ```html <a-form-model :model="formData" :rules="rules"> <a-form-model-item label="密码" prop="password"> <a-input type="password" v-model="formData.password" /> </a-form-model-item> <a-form-model-item> <a-button type="primary" @click="handleSubmit">提交</a-button> </a-form-model-item> </a-form-model> ``` ```javascript export default { data() { return { formData: { password: '' }, rules: { password: [{ required: true, message: '密码不能为空', trigger: 'blur' }, { pattern: /^[a-zA-Z]\w{5,17}$/, message: '密码必须以字母开头,长度在6~18之间,只能包含字母、数字和下划线', trigger: ['blur', 'change'] }] } } }, methods: { handleSubmit() { this.$refs.form.validate(valid => { if(valid) { //表单校验通过,执行提交操作 } else { //表单校验不通过,提示错误信息 } }) } } } ``` 3. 校验触发方式 在Ant Design Vue中,我们可以设置校验的触发方式,例如:blur、change、submit等。其中,blur表示在表单项失去焦点时触发校验,change表示在表单值变化时触发校验,submit表示在点击提交按钮时触发校验。 例如,下面是一个设置校验触发方式的表单: ```html <a-form-model :model="formData" :rules="rules"> <a-form-model-item label="用户名" prop="username"> <a-input v-model="formData.username" /> </a-form-model-item> <a-form-model-item label="密码" prop="password"> <a-input type="password" v-model="formData.password" /> </a-form-model-item> <a-form-model-item> <a-button type="primary" @click="handleSubmit">提交</a-button> </a-form-model-item> </a-form-model> ``` ```javascript export default { data() { return { formData: { username: '', password: '' }, rules: { username: [{ required: true, message: '用户名不能为空', trigger: 'blur' }], password: [{ required: true, message: '密码不能为空', trigger: 'blur' }] } } }, methods: { handleSubmit() { this.$refs.form.validate(valid => { if(valid) { //表单校验通过,执行提交操作 } else { //表单校验不通过,提示错误信息 } }) } } } ``` 以上就是Ant Design Vue的表单校验功能的介绍。在实际的项目开发中,合理利用Ant Design Vue的表单校验功能,可以有效地减少前端开发人员的工作量,并且提高项目的代码质量。 ### 回答3: Ant Design Vue是一个非常流行的UI框架,它提供了很多常用组件和布局,其中就包括了表单组件。在实际的开发中,我们需要对表单中用户输入的数据进行校验,以便保证数据的有效性和安全性。Ant Design Vue提供了丰富的表单校验功能,使得开发者可以轻松实现各种校验需求。 Ant Design Vue表单校验的常用方法包括: 1. 表单验证规则 Ant Design Vue提供了validate() API来验证表单控件,我们可以使用表单验证规则来定义每个表单项的校验规则。例如,我们可以使用required、min、max、pattern等属性来定义必填、最小值、最大值、以及正则表达式等校验规则,对于一些比较复杂的校验规则,我们也可以使用validator来自定义校验函数。 2. 表单项反馈信息 在表单校验失败时,我们需要向用户提供反馈信息,让用户更好地理解错误原因。Ant Design Vue提供了多种反馈方式,包括Tooltip、Message等组件。我们可以通过设置validateTrigger、help、rules等属性来实现这些反馈方式。 3. 表单校验状态管理 表单校验状态管理是Ant Design Vue表单校验的重要组成部分。我们可以通过设置validateStatus、hasFeedback等属性来管理表单项的校验状态。同时,Ant Design Vue还提供了getFieldsError、getFieldValue、resetFields等API,方便我们进行表单校验状态的查询、更新和重置。 总的来说,Ant Design Vue表单校验功能非常强大,它使得表单校验变得简单、高效和灵活。开发者可以根据自己的需求灵活地配置和使用这些校验功能,从而达到更好的用户体验和数据安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值