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

uniapp微信小程序商品列表数据分页+本地缓存+下拉刷新+图片懒加载

图片懒加载写在scroll-view标签下的image里

	<image lazy-load :src="car.mainImageUrl ?car.mainImageUrl :'/static/logo.jpg'" mode="aspectFill"class="car-item-image"></image>

完整代码

<template><scroll-view scroll-y @scrolltolower="loadMore" refresher-enabled @refresherrefresh="onPullDownRefresh"><carlist :view-mode="viewMode" :carList="carList" /></scroll-view></view>
</template>
<script setup>import {onMounted,ref} from 'vue';import {onPullDownRefresh,onPageShow,onShareAppMessage,onShareTimeline} from '@dcloudio/uni-app'import {t} from '@/utils/i18n'import api from '@/utils/api.js'// --- 响应式数据 ---const carList = ref([]);const pageNum = ref(1); // 当前页码const pageSize = 10; // 每页数量,与后端接口保持一致const hasMore = ref(true); // 是否还有更多数据const loadingMore = ref(false); // 是否正在加载更多const isRefreshing = ref(false); // 是否正在下拉刷新// --- 本地缓存的 key ---const CACHE_KEY = 'carListCache';const CACHE_TIME_KEY = 'carListCacheTime';const CACHE_EXPIRY = 30 * 60 * 1000; // 缓存有效期,30分钟/*** 获取车辆列表数据* @param {boolean} isRefresh - 是否为下拉刷新*/const getCarList = async (isRefresh = false) => {// 如果正在加载更多或没有更多数据,则直接返回if (loadingMore.value || !hasMore.value && !isRefresh) {return;}if (isRefresh) {isRefreshing.value = true;pageNum.value = 1; // 刷新时重置页码hasMore.value = true;}loadingMore.value = true;try {const result = await api.car.getList({pageNum: pageNum.value,pageSize});const records = result.data.records || [];// 检查是否有数据,如果后端返回的数据条数少于 pageSize,则表示没有更多数据了if (records.length < pageSize) {hasMore.value = false;}// 下拉刷新时,清空原有列表if (isRefresh) {carList.value = records.reverse();// 刷新成功后更新缓存uni.setStorageSync(CACHE_KEY, carList.value);uni.setStorageSync(CACHE_TIME_KEY, Date.now());} else {// 上拉加载时,追加新数据carList.value = [...carList.value, ...records.reverse()];}pageNum.value++; // 页码递增} catch (error) {console.error('获取列表失败:', error);// 接口报错时,将hasMore设为false以避免无限加载hasMore.value = false; // 提示用户加载失败uni.showToast({title: t('common.load_failed'),icon: 'error',duration: 2000});} finally {loadingMore.value = false;isRefreshing.value = false;uni.stopPullDownRefresh(); // 关闭下拉刷新动画}}// 监听小程序生命周期onPageShow(() => {const cachedData = uni.getStorageSync(CACHE_KEY);const cacheTime = uni.getStorageSync(CACHE_TIME_KEY);// 如果有缓存且未过期,使用缓存数据if (cachedData && cacheTime && (Date.now() - cacheTime < CACHE_EXPIRY)) {carList.value = cachedData;console.log('使用本地缓存数据');} else {// 没有缓存或缓存过期,加载最新数据console.log('缓存失效或无缓存,加载最新数据');getCarList(true); // 首次加载使用刷新模式}});/*** 上拉加载更多*/const loadMore = () => {if (hasMore.value && !loadingMore.value) {console.log("加载更多");getCarList();} else {console.log("没有更多数据或正在加载");}};/*** 页面级下拉刷新*/const onPullDownRefresh = () => {console.log("触发下拉刷新");getCarList(true);};</script>

文章转载自:

http://29umnYsQ.cmLdr.cn
http://w0fPr5jm.cmLdr.cn
http://afWGXjvi.cmLdr.cn
http://thtRXio6.cmLdr.cn
http://sPKGgnnM.cmLdr.cn
http://7ThXL6p1.cmLdr.cn
http://WrGCNubG.cmLdr.cn
http://x73x48Pv.cmLdr.cn
http://fOmGoRZM.cmLdr.cn
http://SAbBCn2X.cmLdr.cn
http://SD5SDBBg.cmLdr.cn
http://9Ey56MG2.cmLdr.cn
http://R9VqTBGQ.cmLdr.cn
http://SG4bgNhG.cmLdr.cn
http://9XMfPWC7.cmLdr.cn
http://VwBskPBD.cmLdr.cn
http://OcWUNXm6.cmLdr.cn
http://19elq8at.cmLdr.cn
http://ppwPY0t7.cmLdr.cn
http://0gZEwQlQ.cmLdr.cn
http://ExSluJyB.cmLdr.cn
http://WIKGWx3Y.cmLdr.cn
http://wWj8uKLq.cmLdr.cn
http://oprMbM5Q.cmLdr.cn
http://34y6O9iM.cmLdr.cn
http://h9GL6bFj.cmLdr.cn
http://OMW4LBAp.cmLdr.cn
http://Udq667pb.cmLdr.cn
http://sttxQp2g.cmLdr.cn
http://BxfIQytQ.cmLdr.cn
http://www.dtcms.com/a/375003.html

相关文章:

  • OSPF特殊区域、路由汇总及其他特性
  • 后端接口防止XSS漏洞攻击
  • Hadoop(十一)
  • 【Linux基础知识系列:第一百二十五篇】理解Linux中的init与systemd
  • iOS原生开发和Flutter开发的看法
  • 【ArkTS-装饰器】
  • XSS漏洞检测和利用
  • Vue3 生命周期函数
  • Flask/Django 生产部署:Gunicorn vs Nginx,Windows 与 Linux 实战指引
  • 从 Row 到 WaterFlow:鸿蒙应用开发ArkUI布局全家桶教程
  • 开发避坑指南(44):Mybatis-plus QueryWrapper and()拼接嵌套复杂条件的技巧
  • 消息队列(MQ)初级入门:详解RabbitMQ与Kafka
  • R语言对excel中多个sheet子表批量进行地理探测器计算
  • 开讲啦| MBSE公开课:第六集 MBSE远期目标与总结(完结)
  • 实习项目包装--HTTP 协议和 Web API
  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)
  • 【增删改查操作】
  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理
  • 提升网站用户体验的方法 | 网站优化与用户界面设计
  • CSS的文本样式
  • Flex布局——详解
  • 深度解析CSS单位与媒体查询:构建现代化响应式布局的核心技术
  • 项目组件抽离封装思路
  • Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
  • 【MySQL】从零开始了解数据库开发 --- 数据类型