Maison > interface Web > js tutoriel > le corps du texte

Fonction d'ajout et de suppression par lots de React.js

零下一度
Libérer: 2017-04-17 12:02:16
original
2210 Les gens l'ont consulté

L'éditeur suivant vous proposera un article sur la fonction d'ajout et de suppression par lots de React.js. L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil.

Le CMS que j'ai récemment construit nécessite la fonction d'ajout d'images par lots : Dans la boîte conteneur d'ajout de fichiers, il y a deux contenus, à savoir : Ajouter un bouton et un composant Sélectionner un fichier ajoutés.

Analyse structurelle :

Le composant ajouté s'appelle : UploadQiNiuFiles ( Composant de téléchargement de fichier Qiniu), comprenant un bouton de suppression pour supprimer le composant actuel

Ajouter un événement de bouton

Conteneur où le composant ajouté est stocké

Pour obtenir cet effet, il vous suffit de comprendre le but de trois méthodes :

La liaison directe nécessite Supprimer le deleteType() du composant, qui est une méthode qui appelle removeContent()


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

dans le conteneur où le composant est ajouté

, ajoutez par lots addContent() et supprimez RemoveContent() écrit pour le bouton d'ajout


//批量添加
  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
    })
  }
Copier après la connexion

Analyse du code :

Ajouter un conteneur pour le stockage des composants


<p className="pBorder">
   {addToBtn} //添加按钮
   {items}   //被添加的组件
</p>
Copier après la connexion


.pBorder {
  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%;
}
Copier après la connexion

Composants ajoutés : UploadQiNiuFiles et méthode de suppression du composant deleteType()


/**
 * Created by wf on 2016/5/16.
 */
import React,{Component} from &#39;react&#39;;
import {render} from &#39;react-dom&#39;;
import ReactBootstrap , {Input,Button,ButtonToolbar} from &#39;react-bootstrap&#39;;
import style from &#39;../../../../css/meeting_data.css&#39;;

//七牛上传公共组件
import QiniuUpload from &#39;qiniu_uploader&#39;;

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 = (
      <p 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)} />
      </p>
    );

    const deleteQiNiu = (
      <p className="col-md-4">
        <Button bsStyle="danger" className="deleteQiniu" onClick={this.deleteType.bind(this)}>删除</Button>
      </p>

    );

    return(
      <p>
        <p className="uploadBox">
          {qiniu}
          {deleteQiNiu}
        </p>
      </p>
    );
  }
}
Copier après la connexion

Le composant de téléchargement Qiniu a été introduit et est en production Lorsque vous utilisez ce composant, vous avez besoin pour utiliser la méthode d'action et l'état dans les réducteurs, veuillez vous référer à ce lien. Car obtenir les paramètres en police orange nécessite d'utiliser la méthode en action

Ajouter un événement dans le conteneur où p est pBorder

Premier chargement, composant Qiniu Upload : UploadQiNiuFiles, son chemin de chargement est la méthode dans webpack :


/**常用组件路径简写为:
  *
  * 例:config: path.join(__dirname,"./build/config.js")
  * config 变量名
  * path.join(__dirname,"./build/config.js") config的路径
  *
  * 使用方法: import {变量} from &#39;config&#39;
  * //七牛上传公共组件
   import QiniuUpload from &#39;qiniu_uploader&#39;;
  * **/
 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")
  }
 }
Copier après la connexion


import React,{Component} from &#39;react&#39;;
import {render} from &#39;react-dom&#39;;
import ReactBootstrap , {Input,Button,ButtonToolbar} from &#39;react-bootstrap&#39;;
import { Link } from &#39;react-router&#39;;
//
import UploadQiNiuFiles from &#39;./UploadQiNiuFiles.js&#39;;
Copier après la connexion

Composant pour le téléchargement de fichiers par lots Nom, je le définis comme : UploadFileToFolde

Les paramètres par défaut sont :


constructor(props){
    super(props);
    this.state = {number: [1], maxNum: 10} //最大数据为10条,默认显示1条
  }
Copier après la connexion


/*获取上个页面传过来的值 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);
  }
Copier après la connexion

Une fois le rendu des données terminé, componentDidUpdate() doit être exécuté. Ce sont toutes les données de l'état :

this.props.meetingState.addUploadFolderToFileList ; it Qu'il soit vide ou indéfini. Si cet état a une valeur et est ajouté avec succès, toutes les données seront effacées la prochaine fois que vous accéderez à cette page et vous serez renvoyé à la page d'origine lorsque vous cliquerez sur le bouton Enregistrer. La méthode clearInvitation() consiste à effacer toutes les données métier. Sa méthode est écrite dans l'action. Les données sont les données métier, écrivez :


/* 清空*/

export const CLEAR_INVITATION = &#39;CLEAR_INVITATION&#39;;
 export function clearInvitation(){
  return {
    type: CLEAR_INVITATION,
    data:{
      addInvitationResponse:{},
      Invitations:[],
      deleteInvitationsResponse:{},
      invitationName:&#39;&#39;,
      folderName: &#39;&#39;
    }
  }
}
Copier après la connexion
<. 🎜>


componentDidUpdate(){
    let addFileToFolderList = this.props.meetingState.addUploadFolderToFileList;
    if (typeof(addFileToFolderList) != &#39;undefined&#39;) {
      let status = addFileToFolderList.status;
      if (200 == status) {
        //如果新增成功,则下次添加前清空所有
        this.props.clearInvitation();
        //点击保存按钮,返回原来的页面
        this.props.history.goBack();
      }
    }
  }
Copier après la connexion


//批量添加,直接拿来使用
  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
    })
  }
Copier après la connexion


//删除,直接拿来使用
  removeContent(index) {
    if (this.state.number.length <= 1) {
      return;
    }
    this.state.number.splice(index, 1);
    this.setState({
      number: this.state.number
    })
  }
Copier après la connexion
Il existe une méthode de suppression deleteType() dans le téléchargement Qiniu composant, qui appelle La méthode removeContent() est indispensable. Veuillez noter que je mets également le code de la méthode deleteType() ici :


//绑定被删除的组件,直接拿来使用
  deleteType(){
    let index = this.props.index;
    this.props.callbackParent(index); //调用removeContent()方法
  }
Copier après la connexion


.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!