微信小程序在使用页面栈保存页面信息时,如何避免数据丢失?

微信小程序在使用页面栈保存页面信息时避免数据丢失的方法:

一、使用全局变量存储关键数据

  1. 定义一个全局变量,例如在 app.js 中,用于存储页面的重要信息。
  2. 在页面的 onHideonUnload 生命周期中,将需要保存的数据存储到该全局变量。
  3. 在页面的 onShow 生命周期中,从全局变量中读取数据并恢复页面状态。

二、使用本地存储(Local Storage)

  1. 在页面的 onHideonUnload 生命周期中,使用 wx.setStorageSyncwx.setStorage 将重要数据存储到本地存储。
  2. 在页面的 onShow 生命周期中,使用 wx.getStorageSyncwx.getStorage 从本地存储中读取数据并恢复页面状态。

三、使用页面栈的 data 属性进行临时存储

  1. 在页面的 onHideonUnload 生命周期中,将重要数据存储到页面栈的 data 属性中。
  2. 在页面的 onShow 生命周期中,从页面栈的 data 属性中读取数据并恢复页面状态。

以下是具体的实现示例:

一、使用全局变量存储关键数据

app.js

App({globalData: {pageData: {}}
});

页面的 js 文件

const app = getApp();Page({data: {list: [],inputValue: ''},onLoad: function() {// 模拟生成一些列表数据let tempList = [];for (let i = 0; i < 100; i++) {tempList.push(`Item ${i}`);}this.setData({list: tempList});},onHide: function() {// 存储数据到全局变量let pages = getCurrentPages();let currentPage = pages[pages.length - 1];app.globalData.pageData[currentPage.route] = {inputValue: this.data.inputValue,list: this.data.list};},onShow: function() {// 从全局变量中读取数据let pageData = app.globalData.pageData[this.route];if (pageData) {this.setData({inputValue: pageData.inputValue,list: pageData.list});}},onInput: function(event) {this.setData({inputValue: event.detail.value});}
});

代码解释

  • app.js
    • 定义了一个 globalData 对象,其中 pageData 用于存储各个页面的数据。
  • 页面的 js 文件
    • onLoad:模拟生成列表数据并更新到 data 中。
    • onHide:将当前页面的输入框值 inputValue 和列表数据 list 存储到 app.js 的全局变量中,使用 currentPage.route 作为存储的键,确保每个页面的数据存储在不同的位置。
    • onShow:从 app.js 的全局变量中根据当前页面的路由读取数据,并更新到当前页面的 data 中。
    • onInput:更新输入框的值到 data 中。

二、使用本地存储(Local Storage)

页面的 js 文件

Page({data: {list: [],inputValue: ''},onLoad: function() {// 模拟生成一些列表数据let tempList = [];for (let i = 0; i < 100; i++) {tempList.push(`Item ${i}`);}this.setData({list: tempList});},onHide: function() {// 存储数据到本地存储wx.setStorageSync(this.route, {inputValue: this.data.inputValue,list: this.data.list});},onShow: function() {// 从本地存储中读取数据let pageData = wx.getStorageSync(this.route);if (pageData) {this.setData({inputValue: pageData.inputValue,list: pageData.list});}},onInput: function(event) {this.setData({inputValue: event.detail.value});}
});

代码解释

  • onLoad:模拟生成列表数据并更新到 data 中。
  • onHide:使用 wx.setStorageSync 将当前页面的输入框值 inputValue 和列表数据 list 存储到本地存储,以当前页面的路由作为存储的键。
  • onShow:使用 wx.getStorageSync 从本地存储中根据当前页面的路由读取数据,并更新到当前页面的 data 中。
  • onInput:更新输入框的值到 data 中。

三、使用页面栈的 data 属性进行临时存储

页面的 js 文件

Page({data: {list: [],inputValue: ''},onLoad: function() {// 模拟生成一些列表数据let tempList = [];for (let i = 0; i < 100; i++) {tempList.push(`Item ${i}`);}this.setData({list: tempList});},onHide: function() {// 存储数据到页面栈的 data 属性let pages = getCurrentPages();let currentPage = pages[pages.length - 1];currentPage.data.savedData = {inputValue: this.data.inputValue,list: this.data.list};},onShow: function() {// 从页面栈的 data 属性中读取数据let pages = getCurrentPages();let currentPage = pages[pages.length - 1];let savedData = currentPage.data.savedData;if (savedData) {this.setData({inputValue: savedData.inputValue,list: savedData.list});}},onInput: function(event) {this.setData({inputValue: event.detail.value});}
});

代码解释

  • onLoad:模拟生成列表数据并更新到 data 中。
  • onHide:将当前页面的输入框值 inputValue 和列表数据 list 存储到页面栈当前页的 data 属性中的 savedData 对象中。
  • onShow:从页面栈当前页的 data 属性中读取 savedData,并更新到当前页面的 data 中。
  • onInput:更新输入框的值到 data 中。

注意事项

  • 全局变量方法:
    • 适合存储一些全局通用的数据,但如果存储的数据过多,可能会占用较多内存,并且在小程序关闭后数据会丢失。
    • 对于一些轻量级的数据和状态,这种方式较为方便。
  • 本地存储方法:
    • 数据存储在本地,即使小程序关闭后也能保存,但存储的数据大小有限制(一般不超过 10MB)。
    • 适合存储需要长期保存的数据,但读取和写入速度相对较慢。
  • 页面栈 data 属性方法:
    • 适合临时存储,仅在页面栈存在时有效,小程序关闭后会丢失数据。
    • 适合存储页面切换时的临时状态数据。

你可以根据不同的需求选择合适的存储方式,以确保在使用页面栈保存页面信息时避免数据丢失。同时,在存储和读取数据时要注意数据的结构和键的设置,确保数据的一致性和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件上传 分片上传

分片上传则是将一个大文件分割成多个小块分别上传&#xff0c;最后再由服务器合并成完整的文件。这种做法的好处是可以并行处理多个小文件&#xff0c;提高上传效率&#xff1b;同时&#xff0c;如果某一部分上传失败&#xff0c;只需要重传这一部分&#xff0c;不影响其他部分…

js解决 Number失精度问题

const updatePromises adinfo.rows.map(async item > {const cwf await uniCloud.httpclient.request("https://api.oceanengine.com/open_api/v3.0/project/list/", {method: GET,data: {advertiser_id: item.account_id},// 1. 指定text数据格式dataType: tex…

实力认证 | 海云安入选《信创安全产品及服务购买决策参考》

近日&#xff0c;国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》&#xff0c;报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…

Picocli 命令行框架

官方文档 https://picocli.info/ 官方提供的快速入门教程 https://picocli.info/quick-guide.html 使用 Picocli 创建命令行应用程序 Picocli 是一个用于构建 Java 命令行应用的强大框架&#xff0c;它简化了参数解析和帮助消息生成的过程。 下面是如何使用 Picocli 构建简单命…

windows系统“GameInputRedist.dll”文件丢失或错误导致游戏运行异常如何解决?windows系统DLL文件修复方法

GameInputRedist.dll是存放在windows系统中的一个重要dll文件&#xff0c;缺少它可能会造成部分游戏不能正常运行。当你的电脑弹出提示“无法找到GameInputRedist.dll”或“计算机缺少GameInputRedist.dll”等错误问题&#xff0c;请不用担心&#xff0c;我们将深入解析DLL文件…

M4Pro安装homebrew并基于homebrew安装MySQL踩坑记录

系统偏好设置允许安装任何来源应用&#xff1a;sudo spctl --master-disable 清除提示已损坏软件的安全隔离&#xff0c;重新安装&#xff1a; xattr -cr 空格&#xff0b;App路径 安装homebrew&#xff1a; /opt/homebrew/Cellar 安装包目录 /opt/homebrew/etc 默认运行目…

tmux 中鼠标滚动异常:^[[A和^[[B是什么以及如何解决

tmux 中鼠标滚动异常问题及解决方案 在使用 tmux 时&#xff0c;有时我们会遇到一个现象&#xff1a;当尝试使用鼠标滚轮滚动窗口内容时&#xff0c;终端中会出现一串类似 ^[[A^[[A 的字符。这让人困惑&#xff0c;不知道鼠标滚动为什么不起作用&#xff0c;也不清楚这些字符究…

【Vue】mouted、created、computed区别

mouted、created、computed区别 前端vue重构 — computed、watch、组件通信等常用知识整理 created和mouted都是vue生命周期中的钩子函数&#xff0c;通常用来做一些初始化的工作&#xff0c;比如发送http请求、对组件绑定自定义事件 created&#xff1a;实例创建完后立即调用…

前端如何设计一个回溯用户操作的方案

同一个项目&#xff0c;为什么我本地无法复现&#xff0c;只有客户的设备才复现&#xff1f; 如何获取用户的操作路径呢&#xff1f; 两种方案&#xff1a;埋点和rrweb 埋点就很简单了&#xff0c;将所有可能操作的节点都进行预埋数据&#xff1b;但埋点简单并不省心&#xff…

概率论考前一天

判断是不是分布函数&#xff1a;单调不减&#xff0c;右连续&#xff0c;F负无穷为0&#xff0c; F正无穷为1 判断是不是密度函数&#xff1a;非负性&#xff08;函数任意地方都大于0&#xff09;&#xff0c;规范&#xff1a;积分为1

2Hive表类型

2Hive表类型 1 Hive 数据类型2 Hive 内部表3 Hive 外部表4 Hive 分区表5 Hive 分桶表6 Hive 视图 1 Hive 数据类型 Hive的基本数据类型有&#xff1a;TINYINT&#xff0c;SAMLLINT&#xff0c;INT&#xff0c;BIGINT&#xff0c;BOOLEAN&#xff0c;FLOAT&#xff0c;DOUBLE&a…

FPGA工程师成长四阶段

朋友&#xff0c;你有入行三年、五年、十年的职业规划吗&#xff1f;你知道你所做的岗位未来该如何成长吗&#xff1f; FPGA行业的发展近几年是蓬勃发展&#xff0c;有越来越多的人才想要或已经踏进了FPGA行业的大门。很多同学在入行FPGA之前&#xff0c;都会抱着满腹对职业发…

springCloudGateway+nacos自定义负载均衡-通过IP隔离开发环境

先说一下想法&#xff0c;小公司开发项目&#xff0c;参考若依框架使用的spring-cloud-starter-gateway和spring-cloud-starter-alibaba-nacos, 用到了nacos的配置中心和注册中心&#xff0c;有多个模块&#xff08;每个模块都是一个服务&#xff09;。 想本地开发&#xff0c;…

深度解析 React 中 setState 的原理:同步与异步的交织

在 React 框架的核心机制里&#xff0c;setState是实现动态交互与数据驱动视图更新的关键枢纽。深入理解setState的工作原理&#xff0c;尤其是其同步与异步的特性&#xff0c;对于编写高效、稳定且可预测的 React 应用至关重要。 一、setState 的基础认知 在 React 组件中&a…

向量数据库如何助力Text2SQL处理高基数类别数据

01. 导语 Agent工作流和 LLMs &#xff08;大语言模型&#xff09;的出现&#xff0c;让我们能够以自然语言交互的模式执行复杂的SQL查询&#xff0c;并彻底改变Text2SQL系统的运行方式。其典型代表是如何处理High-Cardinality Categorical Data &#xff08;高基数类别数据&am…

qBittorent访问webui时提示unauthorized解决方法

现象描述 QNAP使用Container Station运行容器&#xff0c;使用Docker封装qBittorrent时&#xff0c;访问IP:PORT的方式后无法访问到webui&#xff0c;而是提示unauthorized&#xff0c;如图&#xff1a; 原因分析 此时通常是由于设备IP与qBittorrent的ip地址不在同一个网段导致…

工程水印相机结合图纸,真实现场时间地点,如何使用水印相机,超简单方法只教一次!

在工程管理领域&#xff0c;精准记录现场信息至关重要。水印相机拍照功能&#xff0c;为工程人员提供了强大的现场信息记录工具&#xff0c;助力工程管理和统计工程量&#xff0c;更可以将图片分享到电脑、分享给同事&#xff0c;协同工作。 一、打开图纸 打开手机版CAD快速看图…

GO语言实现KMP算法

前言 本文结合朱战立教授编著的《数据结构—使用c语言&#xff08;第五版&#xff09;》&#xff08;以下简称为《数据结构&#xff08;第五版&#xff09;朱站立》&#xff09;中4.4.2章节内容编写&#xff0c;KMP的相关概念可参考此书4.4.2章节内容。原文中代码是C语言&…

LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105_中等_C++)(二叉树;递归)

LeetCode 热题 100_从前序与中序遍历序列构造二叉树&#xff08;47_105&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;递归…

1.2 ThreeJS能力演示——模型导入导出编辑

1、模型导入导出编辑能力 1&#xff09;支持导入基本类型模型 最常用&#xff0c;最适合作为web演示模型的是glb格式的&#xff0c;当前演示glb模型导入 // 1) 支持导入基本类型模型const loader new GLTFLoader();loader.load(./three.js-master/examples/models/gltf/Hors…