评论列表信息删除功能的实现

需求:删除当前评论,并且在列表中不再显示

核心思路:拿到即将被删除的列表信息id,对列表进行filter过滤

1.定义渲染列表信息

2.添加渲染删除条件(如果当前登录用户信息的uid和渲染列表信息里的uid保持一致,那么就将删除字样渲染出来)

3.编写并绑定删除事件,因为涉及到删除方法传参事件,所以将绑定的删除事件写为箭头函数,并将列表信息的rpid作为参数传递,根据每条评论的rpid来删除当前评论

使用数组的filter方法来将渲染列表commentList进行过滤,由于在react中原始状态不能被修改,所以通过set函数来进行修改,所以使用了setCommentList方法来修改commentList状态变量,由此更新列表。

结果展示:

最后一条评论已被删除

所有代码展示:

App.js文件

import { useState } from 'react'

import './App.scss'

import avator from './images/avator.jpg'

//评论列表数据

const list = [

  {

    rpid: 1, //评论id

    user: {

      //用户信息

      uid: '13258165',

      avator: 'http://toutiao.itheima.net/resources/images/9.jpg',

      uname: '周杰伦',

    },

    content: '哎呦,不错哦', //评论内容

    ctime: '10-25 12:15', //评论时间

    like: 88,

  },

  {

    rpid: 2, //评论id

    user: {

      //用户信息

      uid: '36080105',

      avator: 'http://toutiao.itheima.net/resources/images/98.jpg',

      uname: '许嵩',

    },

    content: '我寻你千百度,日出到迟暮', //评论内容

    ctime: '04-12 08:45', //评论时间

    like: 98,

  },

  {

    rpid: 3, //评论id

    user: {

      //用户信息

      uid: '30009257',

      avator: 'http://toutiao.itheima.net/resources/images/56.jpg',

      uname: '王心凌',

    },

    content: '或许失败过,但从未认输', //评论内容

    ctime: '12-18 19:02', //评论时间

    like: 120,

  },

  {

    rpid: 4, //评论id

    user: {

      //用户信息

      uid: '19858625',

      avator: 'http://toutiao.itheima.net/resources/images/67.jpg',

      uname: '徐凯',

    },

    content: '没有永远的敌人', //评论内容

    ctime: '11-20 20:15', //评论时间

    like: 120,

  },

  {

    rpid: 5, //评论id

    user: {

      //用户信息

      uid: '30009257',

      avator: 'http://toutiao.itheima.net/resources/images/37.jpg',

      uname: '杨幂',

    },

    content: '不只玫瑰有爱意', //评论内容

    ctime: '11-20 20:15', //评论时间

    like: 456,

  },

  {

    rpid: 6, //评论id

    user: {

      //用户信息

      uid: '30009257',

      avator: 'http://toutiao.itheima.net/resources/images/28.jpg',

      uname: '徐良',

    },

    content: '女骑士', //评论内容

    ctime: '11-20 20:15', //评论时间

    like: 253,

  },

]

//当前登录用户信息

const user = {

  //用户id

  uid: '30009257',

  //用户头像

  avator,

  //用户昵称

  uname: '徐凯工作室',

}

//导航tab数组

const tabs = []

const App = () => {

  const [commentList, setCommentList] = useState(list)

  //删除事件

  const deleteHandle = (id) => {

    //根据id删除

    setCommentList(commentList.filter((item) => item.rpid !== id))

    console.log(id)

  }

  return (

    <div className="app">

      {/* 导航 Tab*/}

      <div className="reply-navigation"></div>

      <div className="reply-wrap">

        {/*  发表评论 */}

        <div className="box-normal"></div>

        {/*  评论列表 */}

        <div className="reply-list">

          {/*  评论项 */}

          {commentList.map((item) => (

            <div className="reply-item" key={item.rpid}>

              {/*头像 */}

              <div className="root-reply-avator">

                <div className="bili-avator">

                  <img

                    className="bili-avator-img"

                    alt=""

                    src={item.user.avator}

                  />

                </div>

              </div>

              <div className="content-wrap">

                {/*用户名 */}

                <div className="user-info">

                  <div className="user-name">{item.user.uname}</div>

                </div>

                {/*评论内容 */}

                <div className="root-reply">

                  <span className="reply-content">{item.content}</span>

                  <div className="reply-info">

                    {/*评论时间 */}

                    <span className="reply-time">{item.ctime}</span>

                    {/*评论数量 */}

                    <span className="reply-count">点赞数:{item.like}</span>

                    {/*删除 */}

                    {/*删除条件 */}

                    {user.uid === item.user.uid && (

                      <span

                        className="reply-delete"

                        onClick={() => {

                          deleteHandle(item.rpid)

                        }}

                      >

                        {'删除'}

                      </span>

                    )}

                  </div>

                </div>

              </div>

            </div>

          ))}

        </div>

      </div>

    </div>

  )

}

export default App

App.scss文件

.app {

    width:100%;

    height: 100%;

}

.reply-wrap{

    height:100%;

    background: url('./images/bg.jpg') no-repeat;

    background-size: 100% 100%;

    padding:20px;

    .reply-item{

        width:100%;

        height: 130px;

        display: flex;

        justify-content: flex-start;

        margin-top:10px;

        .root-reply-avator{

            width:5%;

            .bili-avator{

                .bili-avator-img{

                    width:60px;

                    height:60px;

                    border-radius:50%;

                }

            }

        }

        .content-wrap{

            width:95%;

            overflow: hidden;

            border-bottom: 2px solid darkgray;

            .user-info{

                .user-name{

                    font-size: 16px;

                    color:darkgray;

                    font-weight: 500;

                }

            }

            .root-reply{

                margin-top:25px;

                .reply-content{

                    font-size: 20px;

                    color:chocolate;

                    font-weight: 700;

                }

                .reply-info{

                    font-size: 14px;

                    color:darkgray;

                    font-weight: 500;

                    margin-top:15px;

                    .reply-time{

                        margin-right:25px;

                    }

                    .reply-count{

                        margin-right:25px;

                    }

                    .reply-delete{

                        cursor: pointer;

                    }

                    .reply-delete:hover{

                        color:cornflowerblue;

                    }

                }

            }

        }

    }

}

使用npm start命令启动项目即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/522117.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMwear桥接网络正确配置+静态IP设置

1.桥接网络配置 很多时候在VMware安装完虚拟机之后&#xff0c;会发现配置的桥接网络没有起作用&#xff0c;如果是Linux下输入ifconfig发现只有ipv6的地址而没有ipv4&#xff0c;说明没有桥接没有启用成功&#xff0c;需要按照以下方式来设置 在VMware的左上角打开编辑&#…

ENSP USG防火墙接入虚拟机;开启Web访问;

1.添加防火墙及云&#xff0c;启动防火墙&#xff1b; 2.配置桥接网卡&#xff1b; 默认账户&#xff1a;admin 默认密码&#xff1a;Admin123 #第一次登陆需修改密码&#xff1b; 默认G0/0/0口为管理口&#xff0c;而在模拟器中进入防火墙的web需如下配置&#xff1a; 配置 …

面试(02)————Java基础和集合

一、Java基础知识 1、面向对象的特征 2、Java 的基本数据类型有哪些 3、JDK JRE JVM 的区别 4、重载和重写的区别 5、Java中和equals的区别 6 、String、StringBuffer、StringBuilder三者之间的区别 7、接口和抽象类的区别是什么&#xff1f; 8、反射 9、jdk1.8 的新特…

力扣刷题--不同的二叉搜索树96

不同的二叉搜索树 该题虽然是一个二叉树的题目 但是使用动态规划做 dp[i]数组的含义&#xff1a;i个节点有多少种组合方式递推公式&#xff1a;dp[i] dp[j] dp[i-1-j] j(0–>i-1)初始化&#xff1a;dp[0]1 dp[1] 1确定递推顺序 i(2–>n) j(0–>i-1)推导一遍 c…

后端说处理了跨域但没有生效

场景&#xff1a; 常见的跨域报错&#xff0c;一般都是由后端进行setHeader/*什么的。但是现在这种情况就是后端说他们做了处理。但是我这边请求还是报错。 withCredentials: with-credentials用来设置是否发送cookie&#xff0c;如果为true就会在跨域请求时候携带cookie&…

DC/DC1A30V高效同步降压转换器H4010

DC/DC 1A30V高效同步降压转换器是一种高频、同步、整流、降压、开关模式转换器&#xff0c;内置功率MOSFET。它可以在宽输入电源范围内实现1.5A峰值输出电流&#xff0c;并具有出色的负载和线路调节性能。此外&#xff0c;该转换器需要最少数量的现成外部元件&#xff0c;并采用…

电脑桌面上表格不见了怎么找回?这5个方法不要错过

在日常的办公和学习中&#xff0c;电脑桌面上的各种文件、文件夹和表格等无疑是我们较为频繁使用的资源。然而&#xff0c;有时我们可能会因为一些操作失误或者电脑问题&#xff0c;突然发现桌面上的某个表格文件神秘失踪了。面对这种情况&#xff0c;很多人可能会感到焦虑和不…

Win11怎么关闭防火墙,win11怎么关闭防火墙对应用的限制

Win11系统如何关闭防火墙呢?有时候我们安装一些软件的时候,屏幕右下角会弹出警告,提示软件被拦截,无法安装成功。如果想要正常安装的话,需要先将防火墙功能给关闭了。由于win11的操作逻辑与win10大不同,所以许多小伙伴不清楚win11如何管理防火墙。接下来,小编跟大家分享…

C语言 | Leetcode C语言题解之第12题整数转罗马数字

题目&#xff1a; 题解&#xff1a; const char* thousands[] {"", "M", "MM", "MMM"}; const char* hundreds[] {"", "C", "CC", "CCC", "CD", "D", "DC"…

beego 官网文档本地环境搭建

beego 官网文档本地环境搭建&#xff0c;为什么要本地环境搭建呢&#xff1f;因为beego 原来的官网文档&#xff08;https://beego.gocn.vip/&#xff09;已经不能用了&#xff0c;beego 官网已经在github上说明了&#xff0c;因此如果想方便的看官网文档&#xff0c;就需要在本…

《乡土中国》中国基层传统社会里的一种体系,支配着社会生活的各方面 - 三余书屋 3ysw.net

乡土中国 大家好&#xff0c;今天我们要解读的是费孝通先生的经典著作《乡土中国》。这本书的中文版大约有10万字&#xff0c;我将用30分钟左右的时间为你解读书中的精髓。为什么说中国的根基在于乡土社会&#xff1f;我们应该从哪些方面来理解乡土社会的特征及其重要性&#…

PMP考试难度大吗?和软考比怎么样?

软考和PMP哪个更好考&#xff1f;巧了&#xff0c;两个证都有&#xff0c;我感觉是PMP更好考也更有含金量&#xff0c;软考可以在考过PMP后去考试&#xff0c;基本不用学。PMP是偏向项目管理方向的考试&#xff0c;而软考除了项目管理还要有足够的计算机知识&#xff0c;对没基…

文心一言 VS 讯飞星火 VS chatgpt (231)-- 算法导论17.1 2题

二、证明&#xff1a;如果 k 位计数器的例子中允许 DECREMENT 操作&#xff0c;那么 n 个操作的运行时间可能达到 Θ(nk)。 文心一言&#xff1a; 为了证明如果 k 位计数器的例子中允许 DECREMENT 操作&#xff0c;那么 n 个操作的运行时间可能达到 Θ(nk)&#xff0c;我们可…

力扣回溯篇

文章目录 46.全排列78.子集17.电话号码的字母组合39.组数总和79.单词搜索131.分割回文子串 46.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。你可以按任意顺序返回答案。 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],…

C++利用键值对计算某一个数对应的最值及其索引位置

目录 一、算法概述二、代码实现1、计算最值2、计算最值及其索引 三、结果展示 本文由CSDN点云侠原创&#xff0c;原文链接。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT。 一、算法概述 类似下图所示&#xff0c;计算第一列中1或2对应的最…

剑指Offer题目笔记26(动态规划的基础知识)

面试题88&#xff1a; 问题&#xff1a; ​ 一个数组cost的所有数字都是正数&#xff0c;它的第i个数字表示在一个楼梯的第i级台阶往上爬的成本&#xff0c;在支付了成本cost[i]之后可以从第i级台阶往上爬1级或2级。请计算爬上该楼梯的最少成本。 解决方案一&#xff1a;&…

C++学习笔记(16)——vector的使用与模拟实现

文章目录 比喻与理解一、定义二 、在使用层面三、在实现层面四、vector的成员变量五、vector的迭代器六、vector的容器函数七、vector的其他函数1. reserve更新容器空间大小&#xff1a;vector_name.reserve(size_type);2. resize大小&#xff1a;vector_name.resize(size_type…

AcWing---公约数---最大公约数

4199. 公约数 - AcWing题库 思路&#xff1a; 最大整数x一定是最大公约数的因数&#xff0c;所以先用__gcd(a,b)求出a和b的最大公因数&#xff0c;再用O(log(n))的算法求出最大公因数的因数&#xff0c;放到vector中&#xff0c;并将vector排序。利用STL中的upper_bound(res.…

模组网络通用丨蜂窝网络基础知识介绍

在物联网的时代&#xff0c;蜂窝网络成为了连接各种智能设备的重要基础。而在蜂窝网络中&#xff0c;蜂窝模组则是实现物联网连接的关键组件。作为物联网开发人员&#xff0c;了解蜂窝网络的基础知识是非常重要的。本文详细解答了6个在开发过程的常见问题&#xff0c;帮助客户更…

自然语言处理NLP概述

大家好&#xff0c;自然语言处理(NLP)是计算机科学领域与人工智能领域中的一个重要方向&#xff0c;其研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。本文将从自然语言处理的本质、原理和应用三个方面&#xff0c;对其进行概述。 一、NLP的本质 NLP是一种…