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

H5 列表页返回后保持数据的解决方案总结(以 Vue 3 为例)

🔧 场景问题:

在一个典型的移动端(H5)应用中,用户从 列表页(如商品列表)点击进入 详情页,然后点击返回时,发现:

  • 列表 恢复到第一页

  • 滚动位置丢失

  • 加载状态被重置

  • 用户体验较差


✅ 目标:

  • 返回列表页后 保留原有的数据和状态

  • 恢复滚动位置

  • 支持继续滚动加载下一页


✅ 解决方案

1. 使用 <keep-alive> 缓存组件状态

Vue 提供 <keep-alive> 用于缓存被包裹的组件实例,防止其在切换时被销毁。

<template><router-view v-slot="{ Component }"><keep-alive><component :is="Component" v-if="$route.name === 'List'" /></keep-alive><component :is="Component" v-if="$route.name !== 'List'" /></router-view>
</template>

📌 说明:

  • 只有 List 页面会被缓存,其他页面如 Detail 不缓存。

  • 返回 List 页面时,不会重新加载数据,也不会重新挂载组件。

2. 监听激活与取消激活的生命周期

使用 onActivatedonDeactivated 来处理滚动监听器等副作用:

import { onActivated, onDeactivated } from 'vue'onActivated(() => {// 重新绑定滚动监听
})onDeactivated(() => {// 解绑监听器,防止重复
})

3. 列表容器使用局部滚动(而不是全页面滚动)

设置一个固定高度的列表容器,使用 overflow-y: auto,更容易控制滚动行为:

<div ref="scrollContainer" style="height: 400px; overflow-y: auto" @scroll="handleScroll"><!-- 列表内容 -->
</div>

4. 保存并恢复滚动位置(可选扩展)

如果你使用的是全页面滚动而不是容器滚动,也可以保存滚动位置:

// 离开页面前保存
onBeforeRouteLeave(() => {sessionStorage.setItem('scrollTop', window.scrollY)
})// 返回页面后恢复
onMounted(() => {window.scrollTo(0, Number(sessionStorage.getItem('scrollTop') || 0))
})

✅ 总结关键词

技术点作用
<keep-alive>缓存组件实例及其数据状态
onActivated恢复副作用,如滚动监听
onDeactivated清理副作用,防止重复绑定
容器滚动优化可控区域滚动,便于触底检测
滚动位置缓存保留用户阅读进度(增强体验)
http://www.lryc.cn/news/607307.html

相关文章:

  • 【网安播报】Lazarus Group 利用开源包展开长期供应链间谍战
  • AUTOSAR进阶图解==>AUTOSAR_SRS_E2E
  • c#中switch case语句的用法
  • Spring Cloud 和服务拆分:微服务落地的第一步
  • TwinCAT3示例项目1
  • 日志管理进入「对话式」时代:日志易MCP Server落地实录
  • C# _Json数据
  • 仿艾莫迅MODBUS调试工具写一个上位机
  • 基于springboot的快递分拣管理系统
  • 【智能协同云图库】第七期:基于AI调用阿里云百炼大模型,实现AI图片编辑功能
  • 【AI 加持下的 Python 编程实战 2_12】第九章:繁琐任务的自动化(上)——自动清理电子邮件文本
  • 【Linux学习|黑马笔记|Day1】Linux初识、安装VMware Workstation、安装CentOS7、远程连接、虚拟机快照
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现围栏羊驼的检测识别(C#代码,UI界面版)
  • 标准项目-----网页五子棋(4)-----游戏大厅+匹配+房间代码
  • AJAX快速入门 - 四个核心步骤
  • HTML无尽射击小游戏包含源码,纯HTML+CSS+JS
  • 【Flutter】内存泄漏总结
  • 【数据可视化-78】2025年上半年广东省各市GDP排名深度解析与可视化:Python + Pyecharts 深度洞察(含完整数据、代码)
  • OpenVLA: 论文阅读 -- 开源视觉-语言-行动模型
  • ZKmall开源商城微服务架构电商平台:服务注册与配置中心设计
  • Spring Boot 整合量子密钥分发(QKD)实验方案
  • Linux---make和makefile
  • 分布在背侧海马体CA1区域的位置细胞(place cells)对NLP中的深层语义分析的积极影响和启示
  • 面试题:怎么理解 OSI 参考模型(开放式系统互联参考模型) 和 TCP/IP 模型(传输控制协议 / 网际协议模型 )
  • 【vue】Vue 项目创建工具对比:vue create 与 create-vue 的核心区别
  • RAGFLOW~knowledge graph
  • k8s部署mysql
  • 【数论】P8954 「VUSC」Math Game|普及+
  • SpringBoot3.x入门到精通系列:1.5 配置文件详解
  • QT6 源,十章绘图(2)画刷 QBrush:刷子只涉及填充颜色,线型,填充图片,以及变换矩阵这几个属性,附源代码带注释。