居于ant-design-vue封装的虚拟列表组件av-table

居于ant-design-vue封装的虚拟列表组件av-table

av-table亮点

  • 开箱即用,不破坏antd原有a-table的所有属性和方法,不破坏布局
  • 能加载10W级别以上的数据而不卡顿
  • 最重要的是,可以无缝移植到原有的居于ant-design-vue(3.2.20版本)项目中

原理

  • 简单说一下原理吧,请看下图:

源码地址

源码地址点这里

npm包下载地址

av-table在线演示地址

简介

  • 用ant-design-vue的用户可能会遇到过一些性能上的烦恼:当页面中表格数据量达到一定量级的时候,滚动页面会变得非常卡顿。由于开发过程中疏忽了卡顿问题,等到项目进度已经100%的时候再回头去优化,发现如果要替换掉项目中原有的a-table代码改动量大,时间成本特别高,还存在一定的未知风险。未来解决这个烦恼,本人稍微改动了一下a-table,使其加载10w条数据也不会出现卡顿。所以,av-table就出现了。
  • av-table是居于ant-design-vue(版本3.2.20) 的 a-table组件封装的虚拟列表组件。 av-table组件继承了a-table的所有属性和方法,用户在使用的时候可以直接参照a-table的api文档进行开发, 当然该虚拟列表组件新增了两个a-table没有的关键属性,需要使用者特别注意的,具体属性会在下面注明。
  • 使用前一定要安装ant-design-vue(版本3.2.20)依赖
  • 使用过程中,可能要传一下table的scroll.y,其中av-table的scroll参数与a-table的scroll参数一致 ( 原 ant-design-vue a-table 组件 API 传送地址点这里

额外新增两个参数如下:

参数 说明 类型 默认值 是否必填
virtualized 是否开启虚拟列表功能 boole false
itemHeight 行高设置,当传入该值时,虚拟列表会优先根据该行高进行计算,当用户不传该值时,会根据 size 值选择行高,分别对应关系为:default = 55, middle = 47 small = 39 number 0

av-table使用示例代码

main.ts代码如下

ts 复制代码
import { createApp } from "vue";
//记得引入antd.css,否则会样式丢失
import "ant-design-vue/dist/antd.css";
import App from "./App.vue";
import AVTable from "av-table";

createApp(App).use(AVTable).mount("#app");

App.vue代码如下

ts 复制代码
<template>
  <div id="app">
    <AVTable
      :dataSource="dataSource"
      :virtualized="true"
      :columns="columns"
      :scroll="{ y: '400px' }"
      :pagination="false"
    ></AVTable>
  </div>
</template>

<script setup>
const dataSource = Array.from(
  Array(1000).fill({
    key: "1",
    name: "蒋哥哥",
    age: 18,
    address: "东莞xxxX电子厂",
    tag: "宇宙无敌帅气",
  }),
  (item, index) => ({ ...item, name: `${item.name}${index}`, key: index })
);

const columns = [
  {
    title: "名称",
    dataIndex: "name",
    key: "name",
  },
  {
    title: "年龄",
    dataIndex: "age",
    key: "age",
  },
  {
    title: "特征",
    dataIndex: "tag",
    key: "tag",
  },
  {
    title: "工作单位",
    dataIndex: "address",
    key: "address",
  },
];
</script>

<style scoped>
html {
  height: 100%;
}
body {
  height: 100%;
  margin: 0;
}
#app {
  height: 100%;
}
</style>
相关推荐
马可家的菠萝1 小时前
自动保存已经有了,为什么笔记软件还需要“历史版本”?
前端·后端·架构
半个落月1 小时前
从 "use client" 到 Route Handler:用 Todos 理解 Next.js 水合与全栈请求
前端·react.js·next.js
qq_452396231 小时前
第七篇:《大型前端项目的模块化与目录结构设计》
前端
你脑门上的脚印2 小时前
Vue 项目从零实现语音转文字、文字转语音功能(完整可用 + 踩坑指南)
前端·vue.js
paopaokaka_luck2 小时前
基于springboot3+vue3的车间生产管理系统(Echarts图形化分析、BI报表)
java·前端·spring boot·学习·echarts
程序员鱼皮2 小时前
3 大 DeepSeek Harness 进阶玩法,招多个大肥鱼帮我干活!
前端·后端·ai编程
KoPa2 小时前
HeySmart:大模型开源网关基座-请求生命周期与钩子引擎
前端·后端
七牛开发者2 小时前
Coding Agent 如何跑稳长任务?从上下文管理到运行时状态
前端·javascript·后端
半个落月3 小时前
从 CSR 到 Server Component:吃透 Next.js 16 App Router 路由、布局与 SEO
前端·next.js
七牛开发者3 小时前
拆解 DeepSeek Harness:Profile 与 Bundle 如何装配运行时
前端·javascript·后端