最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談react.js 之 批量添加與刪除功能

 更新時(shí)間:2017年04月17日 08:36:26   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談react.js 之 批量添加與刪除功能。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

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

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

被添加的組件,我們稱(chēng)為: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>中,為添加按鈕寫(xiě)的 批量添加 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)寫(xiě)為:
  *
  * 例: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';

批量上傳文件的組件名稱(chēng),我定義為: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)要這么寫(xiě):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ù),它的方法寫(xiě)在action中,data是業(yè)務(wù)數(shù)據(jù),根據(jù)實(shí)際情況寫(xiě):

/* 清空*/

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 之 批量添加與刪除功能就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • ForwardRef?useImperativeHandle方法demo

    ForwardRef?useImperativeHandle方法demo

    這篇文章主要為大家介紹了ForwardRef?useImperativeHandle方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • react中的useImperativeHandle()和forwardRef()用法

    react中的useImperativeHandle()和forwardRef()用法

    這篇文章主要介紹了react中的useImperativeHandle()和forwardRef()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React路由渲染方式與withRouter高階組件及自定義導(dǎo)航組件應(yīng)用詳細(xì)介紹

    React路由渲染方式與withRouter高階組件及自定義導(dǎo)航組件應(yīng)用詳細(xì)介紹

    這篇文章主要介紹了React路由三種渲染方式、withRouter高階組件、自定義導(dǎo)航組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • react 權(quán)限樹(shù)形結(jié)構(gòu)實(shí)現(xiàn)代碼

    react 權(quán)限樹(shù)形結(jié)構(gòu)實(shí)現(xiàn)代碼

    這篇文章主要介紹了react 權(quán)限樹(shù)形結(jié)構(gòu)實(shí)現(xiàn)代碼,項(xiàng)目背景react + ant design,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-05-05
  • React Native提供自動(dòng)完成的下拉菜單的方法示例

    React Native提供自動(dòng)完成的下拉菜單的方法示例

    這篇文章主要為大家介紹了React Native提供自動(dòng)完成的下拉菜單的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 深入理解React?State?原理

    深入理解React?State?原理

    本文主要介紹了React?State?原理,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • React事件機(jī)制源碼解析

    React事件機(jī)制源碼解析

    這篇文章主要介紹了React事件機(jī)制源碼解析的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04
  • React實(shí)現(xiàn)表格選取

    React實(shí)現(xiàn)表格選取

    這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)表格選取,類(lèi)似于Excel選中一片區(qū)域并獲得選中區(qū)域的所有數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • react-json-editor-ajrm解析錯(cuò)誤與解決方案

    react-json-editor-ajrm解析錯(cuò)誤與解決方案

    由于歷史原因,項(xiàng)目中 JSON 編輯器使用的是 react-json-editor-ajrm,近期遇到一個(gè)嚴(yán)重的展示錯(cuò)誤,傳入編輯器的數(shù)據(jù)與展示的不一致,這是產(chǎn)品和用戶(hù)不可接受的,本文給大家介紹了react-json-editor-ajrm解析錯(cuò)誤與解決方案,需要的朋友可以參考下
    2024-06-06
  • 關(guān)于react-router/react-router-dom v4 history不能訪問(wèn)問(wèn)題的解決

    關(guān)于react-router/react-router-dom v4 history不能訪問(wèn)問(wèn)題的解決

    這篇文章主要給大家介紹了關(guān)于react-router/react-router-dom v4 history不能訪問(wèn)問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01

最新評(píng)論

富锦市| 巫溪县| 怀集县| 招远市| 锡林郭勒盟| 舒城县| 西贡区| 蒙城县| 柘荣县| 长汀县| 墨脱县| 喀喇沁旗| 巫山县| 南安市| 当涂县| 集安市| 安国市| 定远县| 邛崃市| 东乌| 青铜峡市| 三明市| 汶上县| 黎平县| 大新县| 喜德县| 隆德县| 西宁市| 房产| 莆田市| 文昌市| 邵阳市| 江安县| 拉萨市| 若尔盖县| 会理县| 岑溪市| 石棉县| 得荣县| 汝州市| 新昌县|