Maison  >  Article  >  interface Web  >  Comment changer un élément dans un tableau en réaction

Comment changer un élément dans un tableau en réaction

藏色散人
藏色散人original
2022-12-29 09:37:563221parcourir

Comment modifier un élément dans le tableau dans React : 1. Affichez le composant parent App et le composant enfant ToDoList ; 2. Parcourez le composant enfant pour afficher le tableau ToDoList du composant parent et laissez les deux boutons obtenir le identifiant de l'élément de tableau correspondant ;3. Modifiez la valeur complétée de l'élément de tableau correspondant via l'identifiant transmis par le sous-composant.

Comment changer un élément dans un tableau en réaction

L'environnement d'exploitation de ce tutoriel : système Windows 10, React version 18.0.0, ordinateur Dell G3.

Comment changer un élément dans un tableau en réaction ? Comment changer l'élément de tableau correspondant via id ?

React modifie l'élément de tableau correspondant via id :

1 Il y a deux composants ici, le composant parent App et le sous-composant ToDoList, et l'identifiant transmis dans le sous. -component ToDoList est modifié Le contenu des éléments du tableau dans le composant parent App.

1.1 Le composant parent App a un tableau nommé ToDoList, et le code est le suivant :

  this.state = {
       ToDoList:[
         {
           id:1,
           title:'吃饭',
           completed:true
         },
         {
          id:2,
          title:'睡觉',
          completed:false
        },
        {
          id:3,
          title:'学习',
          completed:true
        }
       ]
    }

1.2 Nous passons une méthode du composant parent App au sous-composant ToDoList, et la méthode est nommée changeCompleted. Dans le même temps, le tableau ToDoList du composant parent est également transmis.

    <ToDoList
       ToDoList={this.state.ToDoList} 
       changeTitle={this.changeCompleted}
   listDelete={this.listDelete}
       >
       </ToDoList>

1.3 Affichez le tableau ToDoList du composant parent dans une boucle dans le composant enfant et laissez les deux boutons obtenir l'identifiant de l'élément de tableau correspondant.

import React, { Component } from &#39;react&#39;
import &#39;./ToDoList.css&#39;
export default class ToDoList extends Component {
    render() {
        return (
            <div className=&#39;ToDoList&#39;>
                <ul>
                    {
                        this.props.ToDoList.map((item)=>{
                        return <li key={item.id}>
                            {item.title}
                            <p>{item.completed?&#39;已完成&#39;:&#39;未完成&#39;}</p>
                            <div>
                            //根据id改变父组件中ToDoList数组的数组元素的Completed的值
                            <button className=&#39;btn1&#39; id={item.id} onClick={this.changeCompleted}>切换状态</button>
                            //根据id删除父组件中ToDoList数组的数组元素
                            <button className=&#39;btn2&#39; id={item.id} onClick={this.listDelete}>删除</button>
                            </div>
                          </li>
                        })
                    }
                </ul>
              
            </div>
        )
    }
    listDelete=(e)=>{
        this.props.listDelete(e.target.id)
    }
    changeCompleted=(e)=>{
        this.props.changeCompleted(e.target.id)
    }
}

2. Le bouton du composant enfant déclenche l'événement changeCompleted du composant parent et apporte la valeur id de l'élément du tableau correspondant au bouton du composant enfant, qui sert à modifier la valeur terminée dans le tableau id correspondant. élément.

  changeCompleted=(id1)=>{
    // 传过来的id不是数字类型,这里进行强制转换,不然下面的if语句无法判断
    const id2=Number(id1)
    //map遍历的数组元素是对象的话,会修改原数组的值,也就是会修改this.state的值,这之前建议深拷贝原数组再操作,个人浅见。
    //最简单的深拷贝(JSON.stringify() 和JSON.parse())
    //先把对象使用JSON.stringify()转为字符串,再赋值给另外一个变量,然后使用JSON.parse()转回来即可。
    //深拷贝
    const ToDoList1 = JSON.parse( JSON.stringify([...this.state.ToDoList]))
    this.setState({
      //将拷贝的数组展开每一项,对每一项的id和传过来的id2进行对比,如果和传过来的id相同,说明
      //找到了需要修改的哪一项,然后将那一项的completed取反即可。
      ToDoList:ToDoList1.map((item)=>{
        if(item.id===id2){
          item.completed = !item.completed
        }
        //id不同就直接返回原来的值不修改,无论修改与否的的值都在这里返回
        return item
      })
    })
  }

2.1 Ici, la valeur complétée de l'élément du tableau correspondant est modifiée avec succès via l'identifiant transmis par le sous-composant, afin qu'elle puisse être basculée entre vrai et faux.

Apprentissage recommandé : "Tutoriel vidéo React"

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!

Déclaration:
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