• AntDesign Form表单字段校验的三种方式


    1.使用getFieldDecorator的rules规则

    最简单的方法就是使用getFieldDecorator中的rules验证。rules中定义校验规则,message为校验不通过时的提示文字。

    {getFieldDecorator('inputContent', {
                rules: [{
                  required: true, 
                  message: '请输入内容!',
                }],
              })(
                <Input />
    )}
    • rules校验规则

    参数说明类型默认值
    enum 枚举类型 string -
    len 字段长度 number -
    max 最大长度 number -
    message 校验文案 string ReactNode  
    min 最小长度 number -
    pattern 正则表达式校验 RegExp -
    required 是否必选 boolean false
    transform 校验前转换字段值 function(value) => transformedValue:any -
    type 内建校验类型,可选项 string 'string'
    validator 自定义校验(注意,callback 必须被调用 function(rule, value, callback) -
    whitespace 必选时,空格是否会被视为错误 boolean false

    更多高级用法可研究 async-validator

    2.使用getFieldDecorator的validator自定义校验

    validator可以自定义校验规则,适用于无法用rules校验规则校验的情况,比如校验再次输入密码与前一次输入的密码是否相同。其中,参数val为输入的值,callback必须被调用,是校验失败时的回调,内容为提示文字。

    handleValidator = (rule, val, callback) => {
            if (!val) {
                callback();
            }
            let validateResult = ...;  // 自定义规则
            if (!validateResult) {
                callback('请输入正确的内容!');
            }
            callback();
        }
    {getFieldDecorator('validator', {
        rules: [{
            required: true,
            message: '请输入内容'
        }, {
            validator: this.handleValidator
        }]
    })(
        <input />
    )}
    • 注意:一个 Form.Item 建议只放一个被 getFieldDecorator 装饰过的 child,当有多个被装饰过的 child 时,help required validateStatus 无法自动生成。此时可用下面一种方法校验。

    3.使用validateStatus自定义校验

    antd提供了validateStatus,help,hasFeedback 等属性,你可以不需要使用 Form.create 和 getFieldDecorator,自己定义校验的时机和内容。

    • validateStatus: 校验状态,可选 'success', 'warning', 'error', 'validating'。
    • hasFeedback:用于给输入框添加反馈图标。
    • help:设置校验文案。
    <FormItem
          {...formItemLayout}
          label="Success"
          hasFeedback
          validateStatus="success"
        >
          <Input placeholder="I'm the content" id="success" />
    </FormItem>
    
    <FormItem
          {...formItemLayout}
          label="Warning"
          hasFeedback
          validateStatus="warning"
        >
          <Input placeholder="Warning" id="warning" />
    </FormItem>
    
    <FormItem
          {...formItemLayout}
          label="Fail"
          hasFeedback
          validateStatus="error"
          help="Should be combination of numbers & alphabets"
        >
          <Input placeholder="unavailable choice" id="error" />
    </FormItem>
    三种校验状态
    • 可用属性
    参数说明类型默认值
    colon 配合 label 属性使用,表示是否显示 label 后面的冒号 boolean true
    extra 额外的提示信息,和 help 类似,当需要错误信息和提示文案同时出现时,可以使用这个。 string ReactNode  
    hasFeedback 配合 validateStatus 属性使用,展示校验状态图标,建议只配合 Input 组件使用 boolean false
    help 提示信息,如不设置,则会根据校验规则自动生成 string ReactNode  
    label label 标签的文本 string ReactNode  
    labelCol label 标签布局,同 <Col>组件,设置 span``offset值,如 {span: 3, offset: 12}或 sm: {span: 3, offset: 12} object  
    required 是否必填,如不设置,则会根据校验规则自动生成 boolean false
    validateStatus 校验状态,如不设置,则会根据校验规则自动生成,可选:'success' 'warning' 'error' 'validating' string  
    wrapperCol 需要为输入控件设置布局样式时,使用该属性,用法同 labelCol object
    • 注意: 这种校验方法有一个不足之处,就是不使用getFieldDecorator的话没办法设置字段名,获取输入的值的时候不能用getFieldsValue和setFieldsValue等方法对表单进行赋值和取值。

    参考

    https://ant.design/components/form-cn/#components-form-demo-dynamic-rule

  • 相关阅读:
    提升应用崩溃时的用户体验——去掉烦人的“很抱歉”提示框
    Activity与DialogFragment交互的方法
    取之有道——巧用Root权限 启动其他APP中的Activity
    巧用Handler获取View控件信息
    关于遍历javascript 中的json串浏览器输出的结果不统一的情况
    PHP usort 函数底层排序
    IO多路复用小故事
    不知道写的是啥
    GC算法-增量式垃圾回收
    GC算法-分代垃圾回收
  • 原文地址:https://www.cnblogs.com/chaoxiZ/p/10136780.html
Copyright © 2020-2023  润新知