---------------------- 此方案已弃用 ----------------------react
弃用缘由:git
渲染[大型表单]时会卡顿。增长表单项过多会卡顿。小型表单能够使用。github
此方案当时设计时,增长及删除表单项是强制整个表单从新渲染,考虑欠佳。antd
项目中已使用 rc-field-form 从新封装。布局
rc-field-form 采用增量更新方式,性能比 rc-form 提高不少,提供了 List 组件自带增长删除表单项,仍要考虑避免没必要要的更新。性能
ant-design 目前表单用的是 rc-form,V4 版本换成了 rc-field-form。ui
参考 antd 源码和 rc-field-form。this
-----------------------------------------------------------spa
因项目须要封装的组件,组件库使用的是Ant Design设计
📙 项目地址 :
👉 Github地址(React Multi-level Form):https://github.com/zlinggnilz/react-multi-level-form
👉 在线示例:https://codesandbox.io/s/clever-montalcini-litjo
📋 说明 :
用到了 Form组件 , 布局组件,表单控件 ,若是没有使用Ant Design,能够用rc-form代替,须要对组件中使用的表单控件和布局进行替换。
example示例待完善,参数可参考组件中的proptypes
🛎️ 注意 :
若是表单很大比较复杂,目前的使用方式,由于是onChange的时候触发表单收集数据,致使频繁render,致使填写表单时候会有些卡。
解决方式 : 此组件中未作处理,根据须要自行处理。我在项目中目前使用的方式是,对input, textarea, inputNumber 输入类型的控件作onBlur的时候触发表单数据收集。其余控件和自定义控件仍是由onChange触发。小的表单能够不用考虑,还用onChange的方式。
📖 使用 :
须要formAttr表述层级结构,data为表单原始值,默认为 { },表单最终提交的是对应层级结构的Object,如:
formAttr:
const formAttr = [ { label: '游乐园', key: 'park', multi: true, children: [ { label: '名称', key: 'name' }, { label: '地点', key: 'location', required: false }, { label: '评分', key: 'rate', type: 'int', required: false } ] } ];
js:
<MultiForm formAttr={formAttr} data={{}} onSubmit={this.handleSubmit} loading={loading} />
页面显示:
Submit Data:
{ "park": [ { "name": "名称1", "location": "地址1", "rate": 4 }, { "name": "名称2", "location": "地点2", "rate": 5 } ] }
📚 参考 :