element-plus el-tree-v2大数据量勾选节点卡顿问题

卡顿原因解析 juejin.cn/post/731161...

html 复制代码
<template>
  <div>
    <button @click="setCheck">勾选</button>
    <el-tree-v2
        ref="treeRef"
        :data="data"
        :height="600"
        :props="defaultProps"
        show-checkbox
        :check-strictly="checkStrictly"
        :default-expanded-keys="[]"
        node-key="id"
    />
  </div>
</template>

<script setup>
import { ref, reactive, onMounted, nextTick } from 'vue'

const checkStrictly = ref(false)
const treeRef = ref()
const data = ref([
  {
    id: 1,
    label: '一级 1',
    children: [
      {
        id: 4,
        label: '二级 1-1',
        children: [
          { id: 9, label: '三级 1-1-1' },
          { id: 10, label: '三级 1-1-2' }
        ]
      },
      { id: 99, label: 'asasa' },
      { id: 88, label: 'vcvcvc' }
    ]
  },
  {
    id: 2,
    label: '一级 2',
    children: [
      { id: 5, label: '二级 2-1' },
      { id: 6, label: '二级 2-2' }
    ]
  },
  {
    id: 3,
    label: '一级 3',
    children: [
      { id: 7, label: '二级 3-1' },
      { id: 8, label: '二级 3-2' }
    ]
  }
])

const defaultProps = reactive({
  children: 'children',
  label: 'label'
})

const ids = ref([10, 8])

// 初始化大数据量
for (let i = 0; i < 20000; i++) {
  ids.value.push(i + 100)
  data.value[0].children.push({
    id: i + 100,
    label: i.toString()
  })
}

/**
 * 勾选逻辑
 */
const setCheck = () => {
  console.time('勾选耗时')
  let node = null
  let obj = {};
  let key = null
  checkStrictly.value = true; // 父子节点不关联

  ids.value.map(item => {
    node = treeRef.value.getNode(item)

    key = node.parent.key || node.key

    treeRef.value.setChecked(item, true, true)

    // 用于,触发勾选函数,实现级联勾选
    if (!obj[key]) {
      obj[key] = node.data;
    }
  })

  checkStrictly.value = false;  // 父子节点关联

  // 触发勾选函数,实现级联勾选
  nextTick(() => {
    for (let key in obj) {
      treeRef.value.setChecked(obj[key], true);
    }
  });

  console.timeEnd('勾选耗时')
}
</script>
相关推荐
杨若瑜几秒前
本地开发环境慢?localhost的锅!
vue.js
EdgeOne边缘安全加速平台4 分钟前
EdgeOne Web 防护×AI 升级:让 AI 既参与攻击识别,也参与误报纠错
前端·人工智能·腾讯云·edgeone
nuIl4 分钟前
实现一个 Coding Agent(6):并行工具调用
前端·ai编程·cursor
Rain5099 分钟前
2.1 Nest.js 项目初始化与模块化架构
开发语言·前端·javascript·后端·架构·数据分析·node.js
cjp56013 分钟前
009. ASP.NET WEB API 用户关联esp32设备
前端·后端·asp.net
Insseals33 分钟前
因斯特浮动模块快速接头✨五大核心优势
前端
沐土Arvin1 小时前
港澳台行政区域json
前端
程序员鱼皮1 小时前
我花 300 块,让 Claude Fable 5 开发桌面 APP,值么?
前端
William_Xu1 小时前
JavaScript 并发控制
前端
拾年2751 小时前
从零手写 Ajax:用原生 XHR 搭建前后端交互全流程
前端·javascript·ajax