首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何实现如下所述的删除功能?

如何实现如下所述的删除功能?
EN

Stack Overflow用户
提问于 2022-05-30 03:12:12
回答 1查看 64关注 0票数 0

单击“删除”图标时在此处删除功能

嗨,我如何实现类似的删除功能,从上面的链接?

我在下面附上了我的代码供你们参考,我正在使用map方法从一个对象的数组中获取数据,然后转移到道具上。

App.js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import logo from "./logo.svg";
import "./App.css";
import IndividualContact from "./Components/IndividualContact";
import ContactList from "./Components/ContactList";
import EditDetails from "./Components/EditDetails";
import { useState } from "react";

const CONTACT_DATA = [
  {
    id: 1,
    name: "Leanne Graham",
    username: "Bret",
    email: "Sincere@april.biz",
    address: {
      street: "Kulas Light",
      suite: "Apt. 556",
      city: "Gwenborough",
      zipcode: "92998-3874",
      geo: {
        lat: "-37.3159",
        lng: "81.1496",
      },
    },
    phone: "1-770-736-8031 x56442",
    website: "hildegard.org",
    company: {
      name: "Romaguera-Crona",
      catchPhrase: "Multi-layered client-server neural-net",
      bs: "harness real-time e-markets",
    },
  },
  {
    id: 2,
    name: "Ervin Howell",
    username: "Antonette",
    email: "Shanna@melissa.tv",
    address: {
      street: "Victor Plains",
      suite: "Suite 879",
      city: "Wisokyburgh",
      zipcode: "90566-7771",
      geo: {
        lat: "-43.9509",
        lng: "-34.4618",
      },
    },
    phone: "010-692-6593 x09125",
    website: "anastasia.net",
    company: {
      name: "Deckow-Crist",
      catchPhrase: "Proactive didactic contingency",
      bs: "synergize scalable supply-chains",
    },
  },
  {
    id: 3,
    name: "Clementine Bauch",
    username: "Samantha",
    email: "Nathan@yesenia.net",
    address: {
      street: "Douglas Extension",
      suite: "Suite 847",
      city: "McKenziehaven",
      zipcode: "59590-4157",
      geo: {
        lat: "-68.6102",
        lng: "-47.0653",
      },
    },
    phone: "1-463-123-4447",
    website: "ramiro.info",
    company: {
      name: "Romaguera-Jacobson",
      catchPhrase: "Face to face bifurcated interface",
      bs: "e-enable strategic applications",
    },
  },
  {
    id: 4,
    name: "Patricia Lebsack",
    username: "Karianne",
    email: "Julianne.OConner@kory.org",
    address: {
      street: "Hoeger Mall",
      suite: "Apt. 692",
      city: "South Elvis",
      zipcode: "53919-4257",
      geo: {
        lat: "29.4572",
        lng: "-164.2990",
      },
    },
    phone: "493-170-9623 x156",
    website: "kale.biz",
    company: {
      name: "Robel-Corkery",
      catchPhrase: "Multi-tiered zero tolerance productivity",
      bs: "transition cutting-edge web services",
    },
  },
  {
    id: 5,
    name: "Chelsey Dietrich",
    username: "Kamren",
    email: "Lucio_Hettinger@annie.ca",
    address: {
      street: "Skiles Walks",
      suite: "Suite 351",
      city: "Roscoeview",
      zipcode: "33263",
      geo: {
        lat: "-31.8129",
        lng: "62.5342",
      },
    },
    phone: "(254)954-1289",
    website: "demarco.info",
    company: {
      name: "Keebler LLC",
      catchPhrase: "User-centric fault-tolerant solution",
      bs: "revolutionize end-to-end systems",
    },
  },
  {
    id: 6,
    name: "Mrs. Dennis Schulist",
    username: "Leopoldo_Corkery",
    email: "Karley_Dach@jasper.info",
    address: {
      street: "Norberto Crossing",
      suite: "Apt. 950",
      city: "South Christy",
      zipcode: "23505-1337",
      geo: {
        lat: "-71.4197",
        lng: "71.7478",
      },
    },
    phone: "1-477-935-8478 x6430",
    website: "ola.org",
    company: {
      name: "Considine-Lockman",
      catchPhrase: "Synchronised bottom-line interface",
      bs: "e-enable innovative applications",
    },
  },
  {
    id: 7,
    name: "Kurtis Weissnat",
    username: "Elwyn.Skiles",
    email: "Telly.Hoeger@billy.biz",
    address: {
      street: "Rex Trail",
      suite: "Suite 280",
      city: "Howemouth",
      zipcode: "58804-1099",
      geo: {
        lat: "24.8918",
        lng: "21.8984",
      },
    },
    phone: "210.067.6132",
    website: "elvis.io",
    company: {
      name: "Johns Group",
      catchPhrase: "Configurable multimedia task-force",
      bs: "generate enterprise e-tailers",
    },
  },
  {
    id: 8,
    name: "Nicholas Runolfsdottir V",
    username: "Maxime_Nienow",
    email: "Sherwood@rosamond.me",
    address: {
      street: "Ellsworth Summit",
      suite: "Suite 729",
      city: "Aliyaview",
      zipcode: "45169",
      geo: {
        lat: "-14.3990",
        lng: "-120.7677",
      },
    },
    phone: "586.493.6943 x140",
    website: "jacynthe.com",
    company: {
      name: "Abernathy Group",
      catchPhrase: "Implemented secondary concept",
      bs: "e-enable extensible e-tailers",
    },
  },
  {
    id: 9,
    name: "Glenna Reichert",
    username: "Delphine",
    email: "Chaim_McDermott@dana.io",
    address: {
      street: "Dayna Park",
      suite: "Suite 449",
      city: "Bartholomebury",
      zipcode: "76495-3109",
      geo: {
        lat: "24.6463",
        lng: "-168.8889",
      },
    },
    phone: "(775)976-6794 x41206",
    website: "conrad.com",
    company: {
      name: "Yost and Sons",
      catchPhrase: "Switchable contextually-based project",
      bs: "aggregate real-time technologies",
    },
  },
  {
    id: 10,
    name: "Clementina DuBuque",
    username: "Moriah.Stanton",
    email: "Rey.Padberg@karina.biz",
    address: {
      street: "Kattie Turnpike",
      suite: "Suite 198",
      city: "Lebsackbury",
      zipcode: "31428-2261",
      geo: {
        lat: "-38.2386",
        lng: "57.2232",
      },
    },
    phone: "024-648-3804",
    website: "ambrose.net",
    company: {
      name: "Hoeger LLC",
      catchPhrase: "Centralized empowering task-force",
      bs: "target end-to-end models",
    },
  },
];

function App() {
  const [showEditDetails, setShowEditDetails] = useState(false);

  const showEditHandlder = () =>{
    setShowEditDetails(true);
  }

  const closeEditHandlder = () => {
    setShowEditDetails(false);
  }
  return (
    <div className="App">
      {showEditDetails && (
        <EditDetails onClose={closeEditHandlder} contactData={CONTACT_DATA}></EditDetails>
      )}
      <ContactList onShow={showEditHandlder}  contactData={CONTACT_DATA}></ContactList>
    </div>
  );
}

export default App;

ContactList.js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from 'react'
import IndividualContact from './IndividualContact'

export default function ContactList(props) {
  return (
    <div className="row g-4">

        {props.contactData.map((x) => (
        <IndividualContact 
        onShow={props.onShow}
        name={x.name}
        email={x.email}
        website={x.website}
        phone={x.phone}
        username={x.username}
        ></IndividualContact>

        ))}
    </div>
  )
}

IndividualContact.js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react";
import { useState } from "react";
import "./IndividualContact.css";
import {
  MailOutlined,
  PhoneOutlined,
  GlobalOutlined,
  HeartOutlined,
  EditOutlined,
  DeleteOutlined,
  HeartFilled,
} from "@ant-design/icons";

export default function IndividualContactRow(props) {
  const [ifLiked, setIfLiked] = useState(false);
  const clickHandler = () => {
    setIfLiked(!ifLiked);
  };
  return (
    <div className=" col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-3 col-3">
      <div className="container-test">
        <div className="body-image">
          <img
            src={`https://avatars.dicebear.com/v2/avataaars/${props.username}.svg?options[mood][]=happy`}
          ></img>
        </div>
        <div className="body-content">
          <h3>{props.name}</h3>
          <div className="d-flex flex-row">
            <MailOutlined style={{ fontSize: "18px", height: "26px" }} />
            <p>{props.email}</p>
          </div>
          <div className="d-flex flex-row">
            <PhoneOutlined style={{ fontSize: "18px", height: "26px" }} />
            <p>{props.phone}</p>
          </div>
          <div className="d-flex flex-row">
            <GlobalOutlined style={{ fontSize: "18px", height: "26px" }} />
            <p>{  `http://${props.website}`}</p>
          </div>
        </div>
        <ul className="body-actions">
          <li>
            <button onClick={clickHandler}>
              {ifLiked && <HeartFilled style={{ color: "red", fontSize: "20px" }}></HeartFilled>}
              {!ifLiked && (
                <HeartOutlined style={{ color: "red", fontSize: "20px" }} />
              )}{" "}
            </button>
          </li>

          <li>
            <button>
              {" "}
              <EditOutlined onClick={props.onShow} style={{ fontSize: "20px" }}></EditOutlined>
            </button>
          </li>

          <li>
            <button>
              {" "}
              <DeleteOutlined style={{ fontSize: "20px" }}></DeleteOutlined>
            </button>
          </li>
        </ul>
      </div>
    </div>
  );
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-30 03:27:41

在App.js中,创建一个包含用户列表的本地状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const [contacts, setContacts] = useState(CONTACT_DATA);

还在App.js中创建一个方法,用于删除将接受contact id作为参数的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const deleteContact = (id) => {
   const tmpContacts = contacts.filter((contact) => contact.id != id);
   setContacts([...tmpContacts]);
}

现在,不要将CONTACT_DATA作为ContactList组件中的支柱传递,而是传递联系人状态变量。还传递新创建的方法deleteContact.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ContactList onShow={showEditHandlder}  contactData={contacts} onDelete={deleteContact}></ContactList>

现在在ContactList组件中,将其传递给IndividualContact组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<IndividualContact 
        onShow={props.onShow}
        name={x.name}
        email={x.email}
        website={x.website}
        phone={x.phone}
        username={x.username}
        onDelete={props.onDelete}
        ></IndividualContact>

最后,将此onDelete方法挂钩到单个联系人组件中的delete按钮。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button onClick={(e) => props.onDelete(props.id)}>
   <DeleteOutlined style={{ fontSize: "20px" }}></DeleteOutlined>
</button>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72433381

复制
相关文章
ztree实现编辑和删除功能
前面写了一篇ztree实现根节点单击事件,显示节点信息https://www.jianshu.com/p/1e0ca6d8afad,其中的删除和编辑功能是自定义实现的,现在直接使用文档里面的功能。实现的效果如下图示:
王小婷
2019/06/11
2.3K0
ztree实现编辑和删除功能
java逻辑删除代码_MybatisPlus实现逻辑删除功能
你有没有见过某些网站进行一些删除操作之后,你看不到记录了但是管理员却能够查看到。这里就运用到了逻辑删除。
全栈程序员站长
2022/09/05
1.8K0
java逻辑删除代码_MybatisPlus实现逻辑删除功能
动态数组的删除和销毁功能实现
动态数组的删除 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> struct person { char name[32]; int age; }; void print(void* data) { person *p = (person*)data; printf("姓名:%s\t年龄:%d\n", p->name, p->age); } int compare(void
大忽悠爱学习
2021/03/04
7610
在线涂改图片 php,php UEditor如何实现删除图片功能
php ueditor删除图片的实现方法:首先找到“uedior/dialogs/image/image.js”文件并修改Add内容;然后打开“mageManager.php”文件并添加内容为“function delfile()”即可。
全栈程序员站长
2022/10/04
1.8K0
在线涂改图片 php,php UEditor如何实现删除图片功能
Typecho主题前台实现删除文章功能
这样弄好,点击按钮会弹出确认框,问其是否删除文章,用户确认后才会删除,比较符合操作习惯! 后语
泽泽社长
2023/04/17
5260
Typecho主题前台实现删除文章功能
Laravel 如何实现数据的软删除
对于任何一个模型,如果需要使用软删除功能,需要在模型中使用 Illuminate\Database\Eloquent\SoftDeletes这个 trait。软删除功能需要实现的功能有以下几点:
写PHP的老王
2019/08/19
2.4K0
接口测试平台代码实现24:项目列表的删除功能实现
首先我们设计一个js函数,让其点击之后触发删除功能,为了防止误删,所以要有个确认的对话框。
我去热饭
2022/05/19
1.8K0
接口测试平台代码实现24:项目列表的删除功能实现
如何使用Spring Boot和MinIO实现文件上传、读取、下载和删除的功能?
在现代Web应用程序开发中,文件的上传、读取、下载和删除是非常常见的功能。Spring Boot 是一个流行的Java框架,而MinIO则是一个高性能的对象存储服务。本文将详细介绍如何使用Spring Boot和MinIO实现文件上传、读取、下载和删除的功能。
网络技术联盟站
2023/07/03
5K0
如何使用Spring Boot和MinIO实现文件上传、读取、下载和删除的功能?
EasyCVR平台设备通道批量删除功能的开发实现
EasyCVR视频融合云服务平台支持海量视频汇聚管理,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台可拓展性强,功能灵活,并提供丰富的API接口供用户集成与二次开发。平台已经在大量的线下场景中落地使用,包括智慧工地、智慧校园、智慧工厂、智慧社区等等。
TSINGSEE青犀视频
2022/06/10
4070
Python实现二叉搜索树的删除功能
二叉搜索树(二叉查找树,Binary Search Tree)又称为排序二叉树、有序二叉树。
Python碎片公众号
2021/02/26
8940
Python实现二叉搜索树的删除功能
jQuery+Datatables实现表格批量删除功能
祖传代码的存在,这个项目自我进公司以来,就一直在改写加上维护,没有什么太厉害的技术,据说在我进公司之前,是经过两个Java后台来编写遗留下来的代码,公司觉得若是重新搭建框架过于费力,于是一直沿用至今,随着功能的越来越多,维护起来也是相当的费脑,每次修改的时候,我都会将某个部分的功能记录下来,写在自己的技术博客里面,以防混淆。
王小婷
2018/10/26
3K0
Linux删除文件实现回收站功能
在家目录创建一个文件夹用来保存删除的文件 mkdir -p ~/.Deanrash 修改.bashrc文件 vi ~/.bashrc 在.bashrc文件后面添加下面这些 alias rm=deanrash alias rl='ls ~/.Deanrash' alias ur=undelfile undelfile() { mv -i ~/.Deanrash/$@ ./ } deanrash() { mv $@ ~/.Deanrash/ } cle
院长技术
2022/03/10
1.4K0
Linux 删除文件实现回收站功能
从事过服务器维护的人都知道 rm、rm -rf 的厉害,执行起来一点也不马虎,有点六亲不认的感觉。刚开始我也没觉得 rm 的厉害,经过昨天 rm 掉我几天的工作量,我才发现 rm 就是一把双刃剑,幸好我的服务器有打快照,让我只损失了一天的工作量。
王图思睿
2021/06/16
2.3K0
如何实现选中复制的功能
它一般可以使用第三方库 clipboard.js[1] 来实现,源码很简单,可以读一读
山月
2020/06/04
2.4K0
Redis的配置如下
2.String对象的反序列化问题,直接在Redis服务器上新增一个key-value,而后在代码中get(key)时,报反序列化失败。
翎野君
2023/05/12
3420
Redis的配置如下
点击加载更多

相似问题

如何在android中实现特效,如下所述

12

获取错误,如下所述

12

如何构建android平台的游戏,如下所述?

10

如何在普通div中使用CSS实现如下所述的辉光元素?

15

编写可选列名的查询,如下所述

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文