如题:
<Tabs defaultActiveKey="1" tabPosition={'top'} style={{height:220}}>
{[...Array.from(tabHeader,i=>i)].map((i,index)=>(
<TabPane tab={i} key={index}>
<div style={{textAlign:'left',width:350}}>
<div>
<RangePicker bordered={true} placeholder={['开始时间','结束时间']} onChange={onChange} />
</div>
<div style={{textAlign:'center'}}>
<Button style={{width: '50',marginTop:8,marginBottom: 8,marginRight:110}} onClick={event =>{addTime(index)}}> <PlusOutlined/></Button>
</div>
</div>
</TabPane>
))}
</Tabs>
如上代码中,如何通过点击BUTTON控件为TabPane的DIV中动态的增加一个 时间控件RangePicker
一般这种都是: 数据->视图的模式, 当你想增加某一项的时候, 增加其中的数据, 然后更新state, 就会触发重新渲染. 比如:
详细
界面是根据你的视图来决定的, 你想要选择时间, 其中有的需要多个选择时间, 那你这个选择时间的操作本身就是为了产生数据或者辅助产生数据. 当你需要动态或者根据条件来渲染的时候, 就需要通过 数据->组件 的方式, 不要纠结于 我只是像简单添加一个这么简单.
比如你的要求是: 需要两个时间选择, 那么就传递两个下去:
然后组件在渲染的时候是:
那怎么通过按钮变更, date数组的值呢? 就是将props传递过来的值进行修改, 但是props不能直接修改, 你可以封装一层.
可以直接递归传下去, 也可以使用context传下去. 然后在button里面使用这个, 当点击的时候, 你就读取
renderState.value
然后修改其值, 然后调用renderState.setValue(newValue)
这个时候父组件的值变了, 就会触发重新渲染.根据数据渲染出来的页面, 那么想要更改页面, 也是通过修改数据触发重新渲染得到的.
我是搞后端的, 写过一些react, 不一定符合前端的思想.