当前位置: 首页 > article >正文

前端删除评论操作(局部更新数组)

​评论的删除是局部删除,把所点击的评论id号传递给后端,通知后端在数据库中删除数据,并且返回数据,但是在前端并不直接接收返回的数据,而是触发回调事件,在前端上进行删除评论,首先通过pId观察他是否为以及评论,如果为一级评论,也是就是他的pid为0,就直接通过foreach函数返回新的数组,如果pid号不等于0,就是二级评论,这个时候要通过find函数找到父评论,再通过foreach函数返回新数组

1.在VideoCommentItem组件中,对于要置顶的评论发布”topCommentCallback“事件

// 删除评论
const delComment = () => {proxy.Confirm({message: `确定要删除评论吗?`,okfun: async () => {let result = await proxy.Request({url:proxy.Api.userDelComment,params: {commentId: props.data.commentId,},});if (!result) {return;}mitter.emit("delCommentCallback",{pCommentId:props.data.pCommentId,commentId:props.data.commentId,});},});
};

在VideoComment组件中,不能简单的重新加载数据,

因为评论有很多二级评论,重新加载数据会造成卡顿等显现,所以先判断是否为以及评论,是的话,对以及评论直接加载,不是的话,由返回的pCommentId找到父评论,循环父评论的孩子评论,得到新的数组,即通过本地精准更新避免全量加载

onMounted(()=>{// 删除mitter.on("delCommentCallback",({pCommentId,commentId})=>{//  pCommentId: 父评论ID(0表示顶级评论)commentId: 要删除的评论IDif(pCommentId==0){// 如果是一级评论,没有父评论,即父评论ID为0dataSource.value.list=dataSource.value.list.filter(item=>{return item.commentId!=commentId})dataSource.value.totalCount--}else{// 找到父评论const pComment=dataSource.value.list.find(item=>{return item.commentId==pCommentId})pComment.children=pComment.children.filter(item=>{return item.commentId!=commentId})}})})
onUnmounted(()=>{mitter.off("delCommentCallback")
})

**tips:**为什么像置顶之类的就是后端做排序,删除之类的排序就在前端做
流程图
在这里插入图片描述

置顶操作:必须由后端排序

1.业务特性要求

  • 全局排序规则:置顶是一个 需要持久化存储的排序操作,所有用户看到的置顶评论顺序必须一致。

  • 动态权重计算:置顶可能涉及复杂规则(如置顶时间、权重值、管理员权限等),需后端统一计算。

  1. 技术必要性
  • 前端本地排序 → 其他用户看不到变化 ❌
  • 后端存储排序 → 所有客户端同步 ✅

删除操作:优先前端处理
1.业务特性要求

  • 即时反馈需求:用户期望删除后内容 立即消失,网络延迟会导致体验卡顿。
  • 局部数据变更:删除操作仅影响单条数据,无需重新计算整个列表顺序。
  1. 技术优势
    假设列表有 1000 条评论(含嵌套)
    前端删除 → 操作时间复杂度 O(n) ✅
    后端重载 → 网络传输 + 解析 + 渲染全量数据 ❌

http://www.lryc.cn/news/2402510.html

相关文章:

  • 数学复习笔记 28
  • Delphi 实现远程连接 Access 数据库的指南
  • 在线OJ项目测试
  • C++ --- vector
  • 【python基础知识】变量名和方法名的单下划线(_)和双下划线(__)总结
  • FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
  • ✅ 常用 Java HTTP 客户端汇总及使用示例
  • 快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令
  • Keil调试模式下,排查程序崩溃简述
  • Python读取PDF:文本、图片与文档属性
  • 基于SpringBoot+Vue2的租房售房二手房小程序
  • 数学:学好数学需要对数系进行系统的对比和分析
  • 基于本地LLM与MCP架构构建AI智能体全指南
  • AT2659_GNSS低噪声放大器芯片
  • 跨平台游戏引擎 Axmol-2.6.1 发布
  • MADlib —— 基于 SQL 的数据挖掘解决方案(4)—— 数据类型之矩阵
  • ServBay 1.13.0 更新,新增第三方反向代理/内网穿透
  • C#对象扩展方法:提升对象操作的灵活性与效率
  • Python爬虫爬取天猫商品数据,详细教程【Python经典实战项目】
  • Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数
  • Docker构建自定义的镜像
  • 【SSM】SpringMVC学习笔记8:拦截器
  • 井川里予瓜pdf完整版
  • UI自动化常见的一些问题解决方式
  • 基于 Zynq 平台的 EtherCAT 主站的软硬件协同设计
  • 聊一聊 .NET在Linux下的IO多路复用select和epoll
  • 从零开始的嵌入式学习day33
  • ArcGIS Pro 3.4 二次开发 - 宗地
  • 前端面试准备-7
  • 黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)