浅谈react.js 之 批量添加与删除功能

前端之家收集整理的这篇文章主要介绍了浅谈react.js 之 批量添加与删除功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近做的CMS需要用到批量添加图片功能:在添加文件的容器盒子内,有两个内容,分别是:添加按钮与被添加的选择文件组件。

结构分析:

添加的组件,我们称为:UploadQiNiuFiles(七牛文件上传组件),含一个删除当前组件的删除按钮

添加按钮的事件

添加组件存放的容器

做这个效果只需要明白三个方法的用途就OK:

直接绑定要删除组件的 deleteType(),它是调用删除index数量方法 removeContent()

删除{qiniu}与{deleteQiNiu}内容,是把页面上的这两个内容一起删除 deleteType(){ let index = this.props.index; this.props.callbackParent(index); }

添加组件的容器

中,为添加按钮写的 批量添加 addContent() 与删除removeContent()

= this.state.maxNum) { return; } console.log("this.state.number:" + this.state.number); this.state.number.push(this.state.number[this.state.number.length - 1] + 1); let temp = this.state.number; this.setState({ number: temp }) }

//删除
removeContent(index) {
if (this.state.number.length <= 1) {
return;
}
this.state.number.splice(index,1);
this.setState({
number: this.state.number
})
}

代码分析:

添加组件存放的容器

添加按钮 {items} //被添加的组件
-moz-position: relative;
-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"&gt;
    <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"&gt;
    <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>"&gt;
      {qiniu}
      {deleteQiNiu}
    </div>
  </div>
);

}
}

七牛上传组件,巳作介绍,在制作这个组件时,需要用到action的方法与reducers中的state,请参考这个链接。因为橙色字体中的参数的获取是需要用到action中的方法

在div为divBorder的容器内操作添加事件

首先要加载,七牛上传组件:UploadQiNiuFiles,它的加载路径为webpack中的方法

方法: import {变量} from 'config' * //七牛上传公共组件 import QiniuUpload from 'qiniu_uploader'; * **/ resolve: { alias: { qiniu_uploader: path.join(__dirname,"./public_component/qiniu_upload/QiniuUpload.js"),storage: path.join(__dirname,"./utils/Storage.js"),config: path.join(__dirname,"./build/config.js") } }

批量上传文件的组件名称,我定义为:UploadFileToFolde

默认参数为:

显示1条 }
获取上个页面传过来的值 let local = this.props.location; 如果从(row,query)中跳转过来的页面,从query中传值过来要这么写:let query = local.query; 如果这个页面是包含在某个大的页面下的,要把query与对应的ID传过去 */ componentDidMount(){ let local = this.props.location; let query = local.query; this.props.setActivityId(query.activityId); }

数据渲染完成之后,需要执行componentDidUpdate(),这是state中所有的数据:

this.props.meetingState.addUploadFolderToFileList; 判断这里面的数据是否为空或是undefined。如果这个state有值且新增成功,则下次到这个页面时清空所有的数据并且点击保存按钮时返回到原来的页面。clearInvitation() 的方法是清空所有的业务数据,它的方法写在action中,data是业务数据,根据实际情况写:

export const CLEAR_INVITATION = 'CLEAR_INVITATION';
export function clearInvitation(){
return {
type: CLEAR_INVITATION,data:{
addInvitationResponse:{},Invitations:[],deleteInvitationsResponse:{},invitationName:'',folderName: ''
}
}
}

添加前清空所有 this.props.clearInvitation(); //点击保存按钮,返回原来的页面 this.props.history.goBack(); } } }
= this.state.maxNum) { return; } console.log("this.state.number:" + this.state.number); this.state.number.push(this.state.number[this.state.number.length - 1] + 1); let temp = this.state.number; this.setState({ number: temp }) }
删除,直接拿来使用 removeContent(index) { if (this.state.number.length <= 1) { return; } this.state.number.splice(index,1); this.setState({ number: this.state.number }) }

七牛上传组件中 有个 deleteType() 的删除方法,它调的就是 removeContent() 方法,缺一不可,需要注意,我把这个deleteType()方法代码也放在这里:

删除的组件,直接拿来使用 deleteType(){ let index = this.props.index; this.props.callbackParent(index); //调用removeContent()方法 }
添加的组件定义为变量为一个数组 items let items = [];    //从添加的组件数量中遍历, for(let i = 0; i < this.state.number.length; i++){ //给这个items推送组件 items.push() }
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"&gt;<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"&gt;
        {addToBtn}
        {items}
      </div>
    </div></div>
);

}

以上这篇浅谈react.js 之 批量添加删除功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

原文链接:https://www.f2er.com/js/39939.html

猜你在找的JavaScript相关文章