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

优化elemen-ui的el-table的tree树结构因数据过多卡顿问题

最近遇到一个要在elemen-ui的el-table放一个树结构的表数据
但是因为数据实在过多,而且列也有四五列,还有操作列
dom操作频繁导致页面非常的卡顿

网上看了很多种方法以及elementui的官方方法
使用lazy和load方法终于解决

对应el-table

<el-table v-if="refreshTable" v-loading="loading" :data="list" row-key="id" lazy :load="load" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">

一、获取后端数据

1、设置一份list展示,为了不全部渲染导致页面卡顿,将list的children数据置空,再设置hasChildren 为true表示有展开数据
2、完全拷贝一份数据 listCopy 保存下来,后面查找子节点

getList() {
      this.loading = true;
      //获取后端接口数据
      listOrgAll(this.queryParams).then(res => {
        this.list = res.data
		this.listCopy = JSON.parse(JSON.stringify(res.data)) // 备份的全量数据
		this.list.map(item => {
			if(item.children.length > 0) {
				item.hasChildren = true
				item.children = []
			}

		})
        this.loading = false;
      });
    },

2、load方法

递归查找备份的全量数据,找到对应的children数据,将children数据返回

// 树结构获取数据
	load(tree, treeNode, resolve) {
		// 查找子节点数据
		function findNodeById (node, id) {
			// 找到对应id数据
			if (node.id === id) {
				// 拷贝当前节点数据
				const newNode = { ...node };
				if (newNode.children && newNode.children.length > 0) {
					// 修改查找到的对应id的children数据,把找到的数据里面的children数据置空,并设置hasChildren
					newNode.children = newNode.children.map(child => {
						return {
							id: child.id,
							name: child.name,
							parentId: child.parentId,
							// 设置hasChildren判断是否显示展开按钮
							hasChildren: child.children.length >0 ? true : false,
							children: []  // 置空子节点
						};
					});
				}
				return newNode.children;
			}
			// 递归查找每一层的children数据
			if (node.children && node.children.length > 0) {
				for (let i = 0; i < node.children.length; i++) {
					const result = findNodeById(node.children[i], id);
					if (result) {
						return result;
					}
				}
			}
			return null;
		}
		const foundNode = findNodeById(this.listCopy[0], tree.id);
		console.log(foundNode);
		resolve(foundNode)
	},

http://www.kler.cn/a/229824.html

相关文章:

  • 图像处理 | 图像二值化
  • 【神经网络中的激活函数如何选择?】
  • springboot+vue使用easyExcel实现导出功能
  • 【华为OD-E卷 - 篮球比赛 100分(python、java、c++、js、c)】
  • Jenkins-持续集成、交付、构建、部署、测试
  • 日语IT用语笔记
  • 20240202在WIN10下使用whisper.cpp
  • 17:数据库连接池与Servlet整合-Java Web
  • Spring Cloud Stream解密:流式数据在微服务中的魔力
  • PyTorch的10个基本张量操作
  • 护眼灯色温多少合适?推荐五款合适色温的护眼台灯
  • springboot157基于springboot的线上辅导班系统的开发与设计
  • 深度学习:数据驱动的人工智能革命
  • 消息中间件之RocketMQ源码分析(六)
  • 数据结构刷题 -- 客房预约
  • 【Langchain+Streamlit】打造一个旅游问答AI
  • Flink SQL Client 安装各类 Connector、Format 组件的方法汇总(持续更新中....)
  • 数据结构:单链表
  • LeetCode 0292.Nim 游戏:脑筋急转弯
  • 【经典例子】Java实现2048小游戏(附带源码)
  • 【自然语言处理-工具篇】spaCy<1>--介绍及安装指南
  • 8个国外顶尖设计网站,设计师必备!
  • re:从0开始的CSS学习之路 2. 选择器超长大合集
  • Java锁到底是个什么东西
  • 92.网游逆向分析与插件开发-游戏窗口化助手-显示游戏数据到小助手UI
  • 12. onnx转为rknn测试时有很多重叠框的修改(python)