卖坚果的怪叔叔 卖坚果的怪叔叔
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
首页 › 技术 › AntDesign Table Radio点击死循环导致页面卡死

AntDesign Table Radio点击死循环导致页面卡死

坚果大叔
2024-07-23 17:19:27技术阅读 4,024

AntDesign Table Radio点击死循环导致页面卡死-卖坚果的怪叔叔

前提

在开发过程中使用 vben 的 BasicTable组件进行页面功能实现,因设计需求页面在 table 中需要每行可点击从而显示对应的图标数据。所以需要给 table 中每行加上单选按钮。BasicTable设置如下,只要加上rowSelection即可。另外自带的点击事件为 @row-click="handleRowClick",但是这个点击事件只能点击表格主体而 radio 点击竟然没有效果。所以现在也要给 radio 加上点击事件。

出现问题

给 radio 加上点击事件不是很快嘛!直接在rowSelection中加上onChange即可。一顿操作猛如虎,运行后傻眼了。页面直接卡死崩溃了。



const handleRowSelectionChange = (keys) => {
    const data = cloneDeep(fitTabeleData.value[keys[0] - 1]);
    single_loop_capacity.value = data.image;
    checkedKeys.value = [data.id];
};

功能很简单,就是点击当前行,然后根据index 获取数据,然后显示就好了。这里有个checkedKeys的赋值直接导致页面卡死。

解决问题

一开始想是页面更新问题,或者频繁点击的问题。那就给checkedKeys的赋值加上 nextTick并且给handleRowSelectionChange加上防抖。

  const handleRowSelectionChange = debounce(([selectedKey]) => {
    const selectedRow = fitTabeleData.value.find((row) => row.id === selectedKey) || {};
    single_loop_capacity.value = selectedRow.image;
    nextTick(() => {
      checkedKeys.value = [selectedRow.id];
    });
  }, 100);

修改完之后有满怀信心的试了一下。不出所料,还是不行。没关系,上大招。那就判断一下当前选中的行 ID 是否已经存在于 checkedKeys.value 中。如果已经存在,那么就不需要再次更新 checkedKeys.value,从而避免触发不必要的重新渲染和可能的死循环。我不信这样还解决不了你!

const handleRowSelectionChange = debounce(([selectedKey]) => {
    const selectedRow = fitTabeleData.value.find((row) => row.id === selectedKey) || {};
    single_loop_capacity.value = selectedRow.image;
    nextTick(() => {
      if (checkedKeys.value[0] !== selectedRow.id) {
       这一步是为了避免不必要的更新和重新渲染。具体来说,这个条件判断语句的作用是检查
        checkedKeys.value = [selectedRow.id];
      }
    });
}, 100);

问题所在

其实就是checkedKeys.value中已经存在了id,但是还是修改了它的值。就导致触发了echats dom的渲染更新。而且因为渲染 echarts的数据比较大,所以页面承受不住就卡死了。

赞赏 赞(0)
老家的桃树和梨树
上一篇
做胃镜!
下一篇
在小程序中查看

这是个😊,挣点服务器费用😜

热门文章
Vue-Quill-Editor图片上传(转载)
夏天到了
Input 空格问题
CSS函数
看一看
CSS实现 Tab hover 下划线跟随
专题标签
agent (1) CSS (15) dom (1) Es6入门系列 (14) Git (3) html (1) iview (1) JavaScript (9) js (4) Lif (1) Node (4) pyecharts (1) Python (10) ref (1) scriptable (1) Skill (1) vsCode (1) vue (4) wordpress (2) 三月 (1) 上海 (1) 假期 (1) 其他分享 (3) 前端两三问 (15) 古镇 (1) 外滩 (1) 对象 (1) 小程序 (5) 年度总结 (6) 年终总结 (1) 微信机器人 (4) 打字机 (1) 技术 (1) 日常问题 (8) 日常问题记录 (1) 春天 (2) 服务器 (2) 海族馆 (1) 生活 (8) 网上国网 (1) 记录 (3) 通勤 (1) 重学JavaScript (11) 面试题 (10) 🌸 (1)
什么是Agent?
2026-08-15 23:49:12
441 0 2
什么是 Skill?
2026-08-12 21:32:42
352 1 0
失业在家,我给小朋友做了一个练字小程序!
2026-08-07 16:21:52
694 10 1
上线8年,15万用户的小程序,一共赚了多少钱?
2026-05-30 18:01:24
4,695 4 0
  • 0
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2026 卖坚果的怪叔叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
345
文章
171
评论
432
喜欢