当前位置: 首页 > 工具软件 > Ant Design > 使用案例 >

ant design——Form

魏硕
2023-12-01

绪论:刚开始要把原生的表单控件替换成antdesign中的表单控件可谓是波折重重,我就讲讲我的辛酸史~~~

  • 根据ant design官方网站中的源代码使用。
    因为我只用几个控件,所以直接复制我要的那部分到我的项目中,可是呀,getFieldDecorator方法报错,屡试不爽,各种百度之下,终于知道了到底怎么使用:

    //1. 定于组件的方式要是这样的:
     class 组件名 extends React.Component{......}
     
    //2. 导出方式是这样的:
     //Form.create(options):关于options的说明官网比较详细,可以敲敲代码自行练习
     const WrappedRegistrationForm = Form.create({ name: 'register' })(组件名);
     export default WrappedRegistrationForm;
    
  • ant design表单控件的布局

    const formItemLayout = {
    		//(3.14.0 新增,之前的版本只能设置到 FormItem 上。)label 标签布局,同 <Col> 组件,设置 span offset 值,如 {span: 3, offset: 12} 或 sm: {span: 3, offset: 12}
            labelCol: {  
                xs: { span: 24 },
                sm: { span: 4, offset: 0 },
            },
            // (3.14.0 新增,之前的版本只能设置到 FormItem 上。)需要为输入控件设置布局样式时,使用该属性,用法同 labelCol
            wrapperCol: {
                xs: { span: 24 },
                sm: { span: 13, offset: 1 },
            },
        };
    
    //利用解构赋值的方式实现整个表单的布局
    <Form {...formItemLayout} onSubmit={this.handleSubmit} className="withdraw-cashes-bind"></Form>
    
  • ant design表单控件初始值问题
    刚开始以为Input组件跟原生的input输入框使用方式一样,用了才知道,ref——不支持、value设置初始值——不支持,那就想办法喽~~

    1. 控制表单中Input的值,通过 this.props.form.setFieldsValue方法改变,而不是react的setState,其中cashesRealname指的是getFieldDecorator方法定义的第一个参数
    handleRealnameInputChange = (value) => {
        console.log(value.target);
        this.props.form.setFieldsValue({
            cashesRealname: this.state.realName,
        });
    };
        //手机格式、支付宝账号格式验证
    checkName= (rule, val, callback) => {
        if (!val) {
            callback('不能为空');
        } else {
            if (!(正则表达式.test(val))) {
                callback('格式错误');
            } else {
                callback('');
            }
        }
        callback();
    };
    
    1. getFieldDecorator方法中的第一个参数是用来控制其函数中包含的Input控件的,然后通过Input的onChange事件方法监听Input的值.注意:getFieldDecorator第一个参数只控制其中的Input,如果还有其他元素,那onChange中写的方法(用来监听文本框的输入)就会失效。(更深入的我再细看了补充~~~)
    2. getFieldDecorator方法中的initialValue可以用来设置文本框初始值。
    3. getFieldDecorator方法中的rules数组可以设置文本框是否required。
    4.  getFieldDecorator方法中的rules数组可以设置文本框required={true}时的表单验证函数,通过validator: this.checkName。
     <Form.Item label="真实姓名" colon={false} hasFeedback  validateStatus="" className={'cashes-name'} >
                       {
                            !realName || realName === '' ?
                                getFieldDecorator('cashesRealname', {
                                    initialValue: this.state.realName,       
                                    rules: [{ required: true, message: '昵称不能为空' }, {
                                        validator: this.checkName,
                                    }],
                                    validateTrigger: 'onBlur',
                                })(
                                    <Input placeholder="请输入您的真实姓名" onChange={this.handleRealnameInputChange}/>,
                                )
                                :
                                getFieldDecorator('cashesRealname', {
                                    initialValue: this.state.realName.replace(/(?<=.)./g, '*'),
                                    // initialValue: this.state.realName,
                                    rules: [{ required: false, message: '昵称不能为空' }, {
                                        validator: this.checkName,
                                    }],
                                    validateTrigger: 'onBlur',
                                })(
                                    <Input placeholder="请输入您的真实姓名" readOnly
                                        style={{ boxShadow: 'none', border: 'none' }}
                                        onChange={this.handleRealnameInputChange}/>,
                                )
                        }
                    </Form.Item>
    
    
 类似资料: