大数据量实现滚动分页-vue3+element-plus实现方式

server/2024/10/19 5:25:58/

1.背景:分页是处理大数据量的一种常见方式,一般有页码分页、滚动分页的实现方式,表格页面分页非常常见,下面是一个列表或者表格的滚动分页
2.话不多说,上代码:
(1)解题思路:首先,我采用了 element plus 上的v-infinite-scroll 属性(无限滚动),在滚动时请求分页接口来获取数据;其次,每次请求后的数据都要拼接起来,最后,处理每次滚动都只请求一次接口,使用了nextTick(提高性能,减少不必要的计算和渲染,确保DOM更新完成后执行)

页面代码

<divref="scrollContainer"class="container"id="Content"v-infinite-scroll="handleScroll"><el-row><el-colv-for="(item, index) in allChartList"class="pb-10 pr-4":key="index"><div class="chart-card"><span>{{ item.tagName }}</span><span>{{ item.tagValue }}{{ item.unitName }}</span>...</div></el-col><p v-if="loading">Loading...</p></el-row><script setup lang="ts">
import { ref, computed, nextTick } from "vue";
const allChartList = ref<any>([]);
const loading = ref<boolean>(false);
const pageSize = ref<number>(16);
const pageNo = ref<number>(1);
const totals = ref<number>(0);
const totalPage = computed(() => Math.ceil(totals.value / pageSize.value)); // 计算出你的页码 防止无限滚动
const getData = async () => {try {const result:any = await 自己的API({pageSize: pageSize.value,pageNo: pageNo.value,});if (result.code === "0") {if (result.data) {totals.value = result.data.total;const newData = result.data.list || []allChartList.value = [...allChartList.value, ...newData];}} else {ElMessage.error(result.msg || "查询失败");}} catch (error) {loading.value = false;}
};
// 处理滚动事件
const handleScroll = () => {const scrollTop =document.documentElement.scrollTop || document.body.scrollTop;const clientHeight = document.documentElement.clientHeight;const scrollHeight = document.documentElement.scrollHeight;if (scrollTop + clientHeight >= scrollHeight -10 &&pageNo.value < totalPage.value) { // 这里 需要把当前页面与我们数据的最大页码做比较 避免无限滚动loading.value = true;nextTick(() => { // 这一步重要!!它可以减少不必要的请求与渲染,确保请求的顺序,否则你滑动时可能一次性会请求好几次API这样数据就容易错乱pageNo.value += 1;getData(); loading.value = false;});} else {loading.value = false;}
};
</script>

效果如图:

20240820-142332


http://www.ppmy.cn/server/103629.html

相关文章

ES的介绍和使用

全文搜索引擎 Elastic Search 第一节 引言 当系统数据量上了10亿、100亿条的时候&#xff0c;我们用什么数据库好&#xff1f;如何解决单点故障&#xff1f;如何提升检索速度&#xff1f;如何解决统计分析问题&#xff1f; 传统数据库的应对解决方案 关系型数据库 通过主从备…

什么是生信分析?深入探讨生物信息学的技术、方法与广泛应用

介绍 生物信息学分析&#xff0c;简称生信分析&#xff0c;是一个结合了生物学、计算机科学、信息学和统计学的多学科领域&#xff0c;旨在处理、分析和解释海量的生物数据。随着现代生物技术的发展&#xff0c;尤其是高通量测序&#xff08;Next-Generation Sequencing, NGS&…

【Solidity】合约交互

Delegate Call 在当前合约通过 delegatecall 借用其他合约的方法&#xff0c;更新当前合约的状态变量 contract B {uint public num;address public sender;uint public value;function setVars(uint _num) public payable {num _num;sender msg.sender;value msg.value;}…

C语言——函数专题

1.概念 在C语言中引入函数的概念&#xff0c;有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码&#xff0c;这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数&#xff1a;库函数和自定义函数。 2.库函数 C语言国际标准ANSIC规定了一些常…

前端面试题-Vite的打包速度为什么比Webpack快?

哈喽小伙伴们大家好!今天继续为大家分享一道面试题 大家都知道,Vite和Webpack是前端开发中用来构建项目的两个框架,Webpack是针对Vue2的,而Vite则是为vue3量身定制的,他们有哪些区别呢?为什么我们推荐使用Vite呢?Webpack又有哪些缺点呢?这篇文章我们来一探究竟。 Vite和We…

k8s rbd image replicapool/xxx is still being used

问题现象 启动 pod 卡在 containercreate 状态,使用kubectl describe pod [pod name]命令查看详细报错 Events:Type Reason Age From Message---- ------ ---- ---- …

I2C学习:传输速率

一&#xff0e;内容简介 I2C总线根据传输速度不同&#xff0c;可以划分为5种速度模式&#xff0c;见下列表格。 速度模式 最高速率 备注 标准模式Sm 100Kbps 双向传输 向下兼容 快速模式Fm 400Kbps 快速模式增强Fm 1Mbps 高速模式HSm 3.4Mbps 超快速模式UFm 5Mbp…

企业高性能web服务器---nginx详解(基础介绍配置,核心配置)

目录 一、web服务器介绍 1.1 Apache prefork 模型 1.2 Apache worker 模型 ​编辑 1.3 Apache event模型 1.4 Nginx-高性能的web服务端 1.5 服务端 I/O 流程 1.5.1 磁盘 I/O 1.5.2 网络 I/O 二 、nginx 架构及安装 2.1 nginx 进程结构 2.2源码编译安装nginx 2.2.1…