溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

react.js如何實(shí)現(xiàn)批量添加與刪除功能

發(fā)布時(shí)間:2021-07-09 14:28:14 來(lái)源:億速云 閱讀:330 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下react.js如何實(shí)現(xiàn)批量添加與刪除功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

最近做的CMS需要用到批量添加圖片的功能:在添加文件的容器盒子內(nèi),有兩個(gè)內(nèi)容,分別是:添加按鈕與被添加的選擇文件組件。

react.js如何實(shí)現(xiàn)批量添加與刪除功能

結(jié)構(gòu)分析:

被添加的組件,我們稱為:UploadQiNiuFiles(七牛文件上傳組件),含一個(gè)刪除當(dāng)前組件的刪除按鈕

添加按鈕的事件

被添加組件存放的容器

做這個(gè)效果只需要明白三個(gè)方法的用途就OK:

直接綁定要?jiǎng)h除組件的  deleteType(),它是調(diào)用刪除index數(shù)量的方法  removeContent()

//刪除{qiniu}與{deleteQiNiu}內(nèi)容,是把頁(yè)面上的這兩個(gè)內(nèi)容一起刪除
  deleteType(){
    let index = this.props.index;
    this.props.callbackParent(index);
  }

在添加組件的容器<div className="divBorder"></div>中,為添加按鈕寫的 批量添加 addContent()  與刪除removeContent()

//批量添加
  addContent(event) {
    if (this.state.number.length >= 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
    })
  }

代碼分析:

添加組件存放的容器<div className="divBorder">

<div className="divBorder">
   {addToBtn} //添加按鈕
   {items}   //被添加的組件
</div>
.divBorder {
  position: relative;
  width: 100%;
  height: auto;
  margin-top: 5%;
  border: 1px solid #e3e3e3;
  padding: 30px 10px;
  margin-bottom: 5%;

  -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()

/**
 * 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}內(nèi)容,是把頁(yè)面上的這兩個(gè)內(nèi)容一起刪除,直接綁定要?jiǎng)h除的組件
  //這個(gè)方法調(diào)用的是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)}>刪除</Button>
      </div>

    );

    return(
      <div>
        <div className="uploadBox">
          {qiniu}
          {deleteQiNiu}
        </div>
      </div>
    );
  }
}

 七牛上傳組件,巳作介紹,在制作這個(gè)組件時(shí),需要用到action的方法與reducers中的state,請(qǐng)參考這個(gè)鏈接。因?yàn)槌壬煮w中的參數(shù)的獲取是需要用到action中的方法

在div為divBorder的容器內(nèi)操作添加事件

首先要加載,七牛上傳組件:UploadQiNiuFiles,它的加載路徑為webpack中的方法:

/**常用組件路徑簡(jiǎn)寫為:
  *
  * 例:config: path.join(__dirname,"./build/config.js")
  * config 變量名
  * path.join(__dirname,"./build/config.js") config的路徑
  *
  * 使用方法: 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")
  }
 }
import React,{Component} from 'react';
import {render} from 'react-dom';
import ReactBootstrap , {Input,Button,ButtonToolbar} from 'react-bootstrap';
import { Link } from 'react-router';
//
import UploadQiNiuFiles from './UploadQiNiuFiles.js';

批量上傳文件的組件名稱,我定義為:UploadFileToFolde    

默認(rèn)參數(shù)為:

constructor(props){
    super(props);
    this.state = {number: [1], maxNum: 10} //最大數(shù)據(jù)為10條,默認(rèn)顯示1條
  }
/*獲取上個(gè)頁(yè)面?zhèn)鬟^(guò)來(lái)的值 let local = this.props.location;
   如果從(row,query)中跳轉(zhuǎn)過(guò)來(lái)的頁(yè)面,從query中傳值過(guò)來(lái)要這么寫:let query = local.query;
   如果這個(gè)頁(yè)面是包含在某個(gè)大的頁(yè)面下的,要把query與對(duì)應(yīng)的ID傳過(guò)去
   */
  componentDidMount(){
    let local = this.props.location;
    let query = local.query;
    this.props.setActivityId(query.activityId);
  }

數(shù)據(jù)渲染完成之后,需要執(zhí)行componentDidUpdate(),這是state中所有的數(shù)據(jù):

this.props.meetingState.addUploadFolderToFileList; 判斷這里面的數(shù)據(jù)是否為空或是undefined。如果這個(gè)state有值且新增成功,則下次到這個(gè)頁(yè)面時(shí)清空所有的數(shù)據(jù)并且點(diǎn)擊保存按鈕時(shí)返回到原來(lái)的頁(yè)面。clearInvitation() 的方法是清空所有的業(yè)務(wù)數(shù)據(jù),它的方法寫在action中,data是業(yè)務(wù)數(shù)據(jù),根據(jù)實(shí)際情況寫:

/* 清空*/

export const CLEAR_INVITATION = 'CLEAR_INVITATION';
 export function clearInvitation(){
  return {
    type: CLEAR_INVITATION,
    data:{
      addInvitationResponse:{},
      Invitations:[],
      deleteInvitationsResponse:{},
      invitationName:'',
      folderName: ''
    }
  }
}
componentDidUpdate(){
    let addFileToFolderList = this.props.meetingState.addUploadFolderToFileList;
    if (typeof(addFileToFolderList) != 'undefined') {
      let status = addFileToFolderList.status;
      if (200 == status) {
        //如果新增成功,則下次添加前清空所有
        this.props.clearInvitation();
        //點(diǎn)擊保存按鈕,返回原來(lái)的頁(yè)面
        this.props.history.goBack();
      }
    }
  }
//批量添加,直接拿來(lái)使用
  addContent(event) {
    if (this.state.number.length >= 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
    })
  }
//刪除,直接拿來(lái)使用
  removeContent(index) {
    if (this.state.number.length <= 1) {
      return;
    }
    this.state.number.splice(index, 1);
    this.setState({
      number: this.state.number
    })
  }

 七牛上傳組件中 有個(gè)  deleteType() 的刪除方法,它調(diào)的就是  removeContent() 方法,缺一不可,需要注意,我把這個(gè)deleteType()方法代碼也放在這里: 

//綁定被刪除的組件,直接拿來(lái)使用
  deleteType(){
    let index = this.props.index;
    this.props.callbackParent(index); //調(diào)用removeContent()方法
  }
render(){
     //將要添加的組件定義為變量為一個(gè)數(shù)組 items
    let items = [];
     //從添加的組件數(shù)量中遍歷,
    for(let i = 0; i < this.state.number.length; i++){
    //給這個(gè)items推送組件
      items.push(<UploadQiNiuFiles index={i}
                    callbackParent={this.removeContent.bind(this)}
                    key={this.state.number[i]} {...this.props} />)
    }

    
    const addToBtn = (
      <Button bsStyle="primary" onClick={this.addContent.bind(this)}>添加</Button>
    );return (
      <div>
        <div>
          <div className="divTitle">添加文件</div>
          <div className="divBorder">
            {addToBtn}
            {items}
          </div>
        </div></div>
    );
  }

以上是“react.js如何實(shí)現(xiàn)批量添加與刪除功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI