长列表处理
vue虚拟滚动(vue-virtual-scroll-list)
vue2中可用,vue3中报错:Vue.component is not a function
安装
npm install vue-virtual-scroll-list --save
- 当前node版本12.12.0
- vue-virtual-scroll-list@2.3.3
使用
-
使用虚拟滚动组件
<template> <div> <h1>审批</h1> <h1>实现长列表</h1> <!-- 4, 使用列表组件--> <virtual-list style="height: 360px; overflow-y: auto; width: 100px" :data-key="'uid'" :data-sources="items" :data-component="itemComponent" /> </div> </template> <script> // 1,导入组件 import Item from "./Item"; import VirtualList from "vue-virtual-scroll-list"; export default { name: "root", data() { return { // 2,注册子组件,配置列表内容 itemComponent: Item, items: [ { uid: "unique_1", text: "abc" }, { uid: "unique_2", text: "xyz" }, ], }; }, // 3,注册列表组件 components: { "virtual-list": VirtualList }, // 5,添加测试数据 mounted() { for (let i = 3; i < 1000; i++) { this.items.push({ uid: "unique_" + i, text: "text" + i }); } }, }; </script> <style lang="stylus" scoped></style>
-
Item.vue
<template> <div>{{ index }} - {{ source.text }}</div> </template> <script> export default { name: "item-component", props: { index: { // index of current item type: Number, }, source: { // here is: {uid: 'unique_1', text: 'abc'} type: Object, default() { return {}; }, }, }, }; </script>
原理
方法1: 数据分片
方法2:只渲染可视区域内的内容
可以通过按需进行加载dom,即只渲染可视区域内及其前后部分的数据(根据当前滚动的高度和列表的长度),减少dom的结构数据