Antd的Form.Item自定义类型输入框

    inputGenerator() {
        const { getFieldDecorator } = this.props.form;
        return function (name, type, { initialValue = '', rules = [], label = '' }) {
            let defaultValueInput = <Input placeholder="请输入"/>,
                defaultValueRules = [...rules];
            switch (type) {
                case 'string': // 字符串
                    break;
                case 'int': // 整型
                    defaultValueRules.push({
                        message: '请输入数字', pattern: new RegExp("^[0-9]+$")
                    });
                    break;
                case 'float': // 浮点型
                    defaultValueRules.push({
                        message: '请输入数字或小数点', pattern: new RegExp("^[0-9.]+$")
                    });
                    break;
                case 'boolean': // 布尔类型
                    defaultValueInput = (<Select>
                        <Select.Option value={ true }>TRUE</Select.Option>
                        <Select.Option value={ false }>FALSE</Select.Option>
                    </Select>);
                    break;
                case 'time': // 时间类型
                    defaultValueInput = <TimePicker />;
                    break;
            }
            const valueInput = getFieldDecorator(name, {
                rules: [
                    { required: true, message: `请输入${ label }!` },
                    ...defaultValueRules
                ],
                initialValue
            })(
                defaultValueInput
            );
            return valueInput;
        }
    }

目的是可以根据输入类型返回对应的输入方式:一般输入框,选择菜单,时间选择器

import inputGenerator from 'utils';

Form.create()
class MyComponent extends Component {
    render() {
        const genrator = inputGenerator.call(this);
        return {
            <From>
                <From.Item label='名字'>
                    genrator('name', 'string');
                </From.Item>
                <From.Item label='出生日期'>
                    genrator('name', 'time');
                </From.Item>
                <From.Item label='年龄'>
                    genrator('name', 'int');
                </From.Item>
            </From>
    }
}

随便写了几个,大概这个意思

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值