react实现点击按钮添加一项(开始显示一项默认的) 点击每项按钮添加对应的小项
2017-05-14 15:03
513 查看
我是用三个组件实现的:
组件A: 添加按钮
①首先在组件A中设置一个对象数组add:[{name:[]}] this.state={ add:[{name:[]}] };②写一个新增方法的按钮,并绑定一个点击事件
①写一个对象数组用于接收组件A传来的值this.state={ ContainerItem:[{name:[]}] }②写一个接收组件A值的方法
④写add方法实现点击每项的添加按钮添加一小项
⑤当value=0 时,组件A 中接收参数然后再传到组件B让ContainerItem重新渲染,接收的方法为:onAddItem =(param)=>{
const arr=this.state.ContainerItem
arr[0].name=param.item
this.setState({ContainerItem:arr})
Emiter.emit("add",{"item":this.state.ContainerItem[0].name})
}
组件C:大项里对应的小项
①在state里面定义一个数组用来表示每一项里有多少小项this.state={ arr:[] };
③遍历arr[ ]从而在页面中展示大项中包含的小项
我是用的delete 删除的
组件A: 添加按钮
①首先在组件A中设置一个对象数组add:[{name:[]}] this.state={ add:[{name:[]}] };②写一个新增方法的按钮,并绑定一个点击事件
<Button onClick={this.add()}>新增方法</Button>③写add()方法
//增加一项 add =() =>{ this.state.add.push({name:[]}) //向数组中增加对象以实现新增一项的目的 Emiter.emit("addContainer",{"addContainerItem":this.state.add})//向组件B传值 }组件B:添加的大项
①写一个对象数组用于接收组件A传来的值this.state={ ContainerItem:[{name:[]}] }②写一个接收组件A值的方法
<SubEmiter eventName="addContainer" listener={this.onAddContainer}/>
onAddContainer =(param) =>{ this.setState({ContainerItem:param.addContainerItem}) }③遍历这个对象数组来呈现页面中有多少项
this.state.ContainerItem && this.state.ContainerItem.map((item,i)=>{ return( <Content key={i}> <div className="header"> 访问路径:<Input placeholder="请输入访问路径"/> 返回类型:<Select defaultValue="post" onChange={this.handleChange}> <Option value="get">GET</Option> <Option value="post">POST</Option> </Select> 方法名称:<Input placeholder="请输入方法名称"/> 请求类型:<Select defaultValue="get" onChange={this.handleChange}> <Option value="get">GET</Option> <Option value="post">POST</Option> </Select> {/* 点击增加其中每一小项*/} <a onClick={()=>this.add(i)}><img className="add" src={require('../../assets/images/new_service/新增.png')}/></a> <a onClick={()=>this.del(i)}><img className="del" src={require('../../assets/images/new_service/删除.png')}/></a> </div>
{/* 组件C*/}<Item info={item.name}/> </Content>)})
④写add方法实现点击每项的添加按钮添加一小项
add =(value) =>{ if(value==0){ this.state.ContainerItem[0].name.push({string:"aaa"}); Emiter.emit("add0",{"item":this.state.ContainerItem[value].name}) }else{ this.state.ContainerItem[value].name.push({string:"aaa"}); Emiter.emit("add",{"item":this.state.ContainerItem[value].name}) } }注:因为开始页面中呈现一项默认的,所以要把它和其他项区分开,若直接执行else里的语句会出现点击第二项的添加时第一项已添加的项全部清空
⑤当value=0 时,组件A 中接收参数然后再传到组件B让ContainerItem重新渲染,接收的方法为:onAddItem =(param)=>{
const arr=this.state.ContainerItem
arr[0].name=param.item
this.setState({ContainerItem:arr})
Emiter.emit("add",{"item":this.state.ContainerItem[0].name})
}
组件C:大项里对应的小项
①在state里面定义一个数组用来表示每一项里有多少小项this.state={ arr:[] };
②有一个方法用来接收组件B传来的参数 <SubEmiter eventName="add" listener={this.onAdd}/>
onAdd =(param) =>{ this.setState({arr:this.props.info}) }
③遍历arr[ ]从而在页面中展示大项中包含的小项
this.state.arr && this.state.arr.map((item,i)=>{ return( <div className="container" key={i}> 参数名称:<Input placeholder="请输入参数名称"/> <a className="hint" onClick={this.out}><img src={require('../../assets/images/new_service/提示-拷贝.png')}/></a> 参数类型:<Select defaultValue="post" onChange={this.handleChange}> <Option value="get">GET</Option> <Option value="post">POST</Option> </Select> <a onClick={()=>this.del(i)}><img src={require('../../assets/images/new_service/叉叉.png')}/></a> </div> ) })到此。。。就完成啦!至于删除就是从数组中删除一项啦。。。
我是用的delete 删除的
相关文章推荐
- JS/jQuery实现默认显示部分文字点击按钮显示全部内容
- 默认只显示指定高度,出来按钮 阅读更多,加载全文,点击后显示全文的实现方式
- 实现秒表功能 : 显示时,分,秒 , 点击按钮开始计时
- JS/jQuery实现默认显示部分文字点击按钮显示全部内容
- 1怎样让输入的text文本填写的部分只添加数字、2怎样将输入的数字一次性全部删除 3怎样选择密码 让它不显示 4 怎样实现在没有return的情况下点击button的情况下就能够使键盘页面下落5 怎样实现点击指定的button来对使指定的text进行键盘弹出 6怎样改变button按钮的状态
- 实现首页框架的tab签,点击模块在首页添加tab签之后,同时显示其对应的页面
- 实现首页框架的tab签,点击模块在首页添加tab签之后,同时显示其对应的页面
- 窗体上有两个文本框:一个文本框中最多输入字符6个;一个文本框中输入任何内容都显示*号。再添加一个按钮、2个单选按钮。实现单击按钮后,根据单选按钮,将对应文本框中内容显示在标签
- 如何用数据驱动实现通用化巡检APP(如何一个界面里添加多个点击拍照按钮并显示在不同的imageview里)
- JS实现默认显示部分文字点击按钮显示全部内容
- 如何实现js展开收起(折叠)效果呢?例如:一段内容过长了,我限制他显示为20个字内,但是超出了20的就先用省略号代替,然后后面添加一个展开,点击展开后就显示所有的内容,这时候展开按钮就变成了 折叠按钮
- js实现点击注册按钮开始读秒倒计时的小例子
- js 实现点击浏览图片按钮时同时显示图片
- 我想在datagrid中选择若干记录,再点击添加按钮,给别一个ACCESS表添加选择的记录,在VB中如何实现?
- 点击对话框上的按钮,实现弹出页面,页面在本界面显示?
- js实现默认文本框信息 鼠标点击时没有离开时显示
- Jquery实现:点击按钮,连续地向textarea中添加值
- 实现用户点击“Enter”键时触发默认按钮执行查询
- 在昨天作业的基础上添加 :删除按钮,修改并保存按钮 和 添加按钮。完成这些按钮所对应的功能/新建页面DataXML,使用GridView显示book.xm中的图书信息
- 黑马程序员之WinForm编程基础学习笔记:页面上有一张图片,默认是隐藏的,用户在文本框中输入身份证号(131226198105223452),点击按钮,如果年龄大于18岁则显示图片。