import React, { Component } from 'react';
import { Form, Input, InputNumber, Button, Steps } from 'antd';
const { Step } = Steps;
@Form.create(Exer)
export default class Exer extends Component {
state = {
currentStep: 0, // 当前的步骤
}
// 提交
handleSubmit = e => {
// 默认情况下提交时获得的err和values都是当前显示的表单项的内容,而且切换步骤之后原来表单项的值也没有了
// 每一个表单项的getFieldDecorator加上preserve属性之后就可以获取所有渲染过的表单项(比如刚进入页面没有渲染过第二步的表单此时在第一步提交的时候不会有第二步表单的值(感觉不会影响逻辑的判断),如果已经进入过第二步又回到了第一步,此时在第一步表单提交时会有第二步表单的信息)的值,而且切换步骤之后原来表单项的值依然会保留
e.preventDefault();
this.props.form.validateFields(['name', 'age'], (err, values) => {// 此处只校验name、age,若 fieldNames 参数为空,则校验全部组件
console.log(err, values);
});
}
render() {
const { getFieldDecorator } = this.props.form;
const { currentStep } = this.state;
return (
<div>
<Steps current={currentStep} onChange={current => this.setState({ currentStep: current })}>
<Step title="第一步" />
<Step title="第二步" />
</Steps>
<Form layout="vertical" onSubmit={e => this.handleSubmit(e)}>
{currentStep === 0 && <Form.Item label="姓名">
{getFieldDecorator('name', {
rules: [
{ required: true, message: '请填写姓名' },
],
preserve: true, // 即便字段不再使用,也保留该字段的值(做分布表单的关键)
})(<Input placeholder="请填写姓名" />)}
</Form.Item>}
{currentStep === 1 && <Form.Item label="年龄">
{getFieldDecorator('age', {
rules: [
{ required: true, message: '请填写年龄' },
],
preserve: true, // 即便字段不再使用,也保留该字段的值(做分布表单的关键)
})(<InputNumber min={1} max={100} />)}
</Form.Item>}
</Form>
<div>
<Button type="primary" onClick={this.handleSubmit}>提交</Button>
</div>
</div>
)
}
}
antD分布表单Demo
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 需求:由于业务需要,表单过大的问题,我把表单和提交按钮分开成了两个组件,如图: 解决思路:1.点击按钮时告知父级这...
- 介绍 本篇文章主要介绍基于json schema 实现 vue antd 的动态表单中的第二部分:使用。 源码vu...
- 需要安装有较新版本的node,下面直接开始。 脚手架工具create-react-app 命令如上,然后打开 ht...