场景 : Tabs下有三个TabPane,每个TabPane下是一个form表单,点击不同form下的提交按钮只能验证当前form.item,提交其value值,进行相关操作
问题 : this.props.form.validateFieldsAndScroll()判断校验结果就是对整个页面的Form进行判断,并不能够对单个Form校验结果做判断。
解决 : 把表单作为一个组件独立出去,页面通过props传入表单组件需要的值,在表单组件内部单独维护相关逻辑。(相当于子向父传值)
代码 :
(1)父组件 :state = {MesVal: '',PushVal: '',EmailVal: '',};用于承接各组件value以便操作。
setMessageVal,setPushVal,setEmailVal 三个方法用来传递单个子页面中form的value值。
(2)子组件 : 以其中一个为例
注 : getFieldDecorator 用于和表单进行双向绑定,可以理解为监控各个item的值的变化;
(PushForm = Form.create()(PushForm)) 创建form实例,这一步很重要,不可省略!
点击提交: 重要代码
const {setPushVal} = this.props
setPushVal(values)
到此 传值结束。
插一个类似省级联动的例子:
假设有这样俩个数组:要求根据站点的不同,对应选择该站点下的租户;
state = {site: [],tntInst: []};
const sites = ['站点1', '站点2', '站点3'];
const tntInsts = {
'站点1': ['租户1'],
'站点2': ['租户21'],
'站点3': [
'租户31',
'租户32',
'租户33',
'租户34',
'租户35',
'租户36',
'租户37',
],
};
注:使用setFieldValue(设置一组输入控件的值),可以在切换站点select时,清空上一个站点的租户。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。