最近做的CMS需要用到批量添加图片的功能:在添加文件的容器盒子内,有两个内容,分别是:添加按钮与被添加的选择文件组件。
结构分析:
添加的组件,我们称为:UploadQiNiuFiles(七牛文件上传组件),含一个删除当前组件的删除按钮
添加按钮的事件
添加组件存放的容器
直接绑定要删除组件的 deleteType(),它是调用删除index数量的方法 removeContent()
在添加组件的容器
//删除
removeContent(index) {
if (this.state.number.length <= 1) {
return;
}
this.state.number.splice(index,1);
this.setState({
number: this.state.number
})
}
代码分析:
添加组件存放的容器
-moz-width: 100%;
-moz-height: auto;
-moz-border: 1px solid #e3e3e3;
-moz-padding: 30px 10px;
-moz-margin-bottom: 5%;
-webkit-position: relative;
-webkit-width: 100%;
-webkit-height: auto;
-webkit-border: 1px solid #e3e3e3;
-webkit-padding: 30px 10px;
-webkit-margin-bottom: 5%;
}
被添加的组件:UploadQiNiuFiles 与 删除组件的方法 deleteType()
<div class="jb51code">
<pre class="brush:js;">
/**
- Created by wf on 2016/5/16.
*/
import React,{Component} from 'react';
import {render} from 'react-dom';
import ReactBootstrap,{Input,Button,ButtonToolbar} from 'react-bootstrap';
import style from '../../../../css/meeting_data.css';
//七牛上传公共组件
import QiniuUpload from 'qiniu_uploader';
export default class UploadQiNiuFiles extends Component {
constructor(props){
super(props);
}
//获取qiniukey
getQiniuKey(qiniuKey){
this.props.setQiniuKey(qiniuKey);
}
//获取qiniutoken
getQiniuUptoken() {
this.props.acquireToken();
};
//删除{qiniu}与{deleteQiNiu}内容,是把页面上的这两个内容一起删除,直接绑定要删除的组件
//这个方法调用的是removeContent(),在下面有介绍
deleteType(){
let index = this.props.index;
this.props.callbackParent(index);
}
render(){
const qiniu = (
<div className="col-md-8 qiNiuBtn">
<QiniuUpload containerId="containerId" pickfilesId="pickfilesId" qiniuToken={this.props.meetingState.token} callback={this.getQiniuKey.bind(this)} getQiniuUptoken={this.getQiniuUptoken.bind(this)} />
</div>
);
const deleteQiNiu = (
<div className="col-md-4">
<Button bsStyle="danger" className="deleteQiniu" onClick={this.deleteType.bind(this)}><a href="https://www.jb51.cc/tag/shanchu/" target="_blank" class="keywords">删除</a></Button>
</div>
);
return(
<div>
<div className="upload<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>">
{qiniu}
{deleteQiNiu}
</div>
</div>
);
}
}
七牛上传组件,巳作介绍,在制作这个组件时,需要用到action的方法与reducers中的state,请参考这个链接。因为橙色字体中的参数的获取是需要用到action中的方法
在div为divBorder的容器内操作添加事件
首先要加载,七牛上传组件:UploadQiNiuFiles,它的加载路径为webpack中的方法:
批量上传文件的组件名称,我定义为:UploadFileToFolde
默认参数为:
数据渲染完成之后,需要执行componentDidUpdate(),这是state中所有的数据:
this.props.meetingState.addUploadFolderToFileList; 判断这里面的数据是否为空或是undefined。如果这个state有值且新增成功,则下次到这个页面时清空所有的数据并且点击保存按钮时返回到原来的页面。clearInvitation() 的方法是清空所有的业务数据,它的方法写在action中,data是业务数据,根据实际情况写:
export function clearInvitation(){
return {
type: CLEAR_INVITATION,data:{
addInvitationResponse:{},Invitations:[],deleteInvitationsResponse:{},invitationName:'',folderName: ''
}
}
}
七牛上传组件中 有个 deleteType() 的删除方法,它调的就是 removeContent() 方法,缺一不可,需要注意,我把这个deleteType()方法代码也放在这里:
const addToBtn = (
<Button bsStyle="primary" onClick={this.addContent.bind(this)}><a href="https://www.jb51.cc/tag/tianjia/" target="_blank" class="keywords">添加</a></Button>
);return (
<div>
<div>
<div className="divTitle"><a href="https://www.jb51.cc/tag/tianjia/" target="_blank" class="keywords">添加</a><a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a></div>
<div className="divBorder">
{addToBtn}
{items}
</div>
</div></div>
);
}
以上这篇浅谈react.js 之 批量添加与删除功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。
原文链接:https://www.f2er.com/js/39939.html