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

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

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

  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 属性方法:
    • 适合临时存储,仅在页面栈存在时有效,小程序关闭后会丢失数据。
    • 适合存储页面切换时的临时状态数据。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程

使用 Java 开发 Android 应用&#xff1a;Kotlin 与 Java 的混合编程 在开发 Android 应用程序时&#xff0c;我们通常可以选择使用 Java 或 Kotlin 作为主要的编程语言。然而&#xff0c;有些开发者可能会想要在同一个项目中同时使用这两种语言&#xff0c;这就是所谓的混合编…

BeanFactory 是什么?它与 ApplicationContext 有什么区别?

谈到Spring&#xff0c;那势必要讲讲容器 BeanFactory 和 ApplicationContext。 BeanFactory是什么&#xff1f; BeanFactory&#xff0c;其实就是 Spring 容器&#xff0c;用于管理和操作 Spring 容器中的 Bean。可能此时又有初学的小伙伴会问&#xff1a;Bean 是什么&#x…

ABP - 缓存模块(1)

ABP - 缓存模块&#xff08;1&#xff09; 1. 与 .NET Core 缓存的关系和差异2. Abp 缓存的使用2.1 常规使用2.2 非字符串类型的 Key2.3 批量操作 3. 额外功能 1. 与 .NET Core 缓存的关系和差异 ABP 框架中的缓存系统核心包是 Volo.Abp.Caching &#xff0c;而对于分布式缓存…

SWD仿真接口(for ARM)的使用方法

概述: JTAG JTAG代表联合测试行动小组(定义JTAG标准的小组),旨在作为测试板的一种方式。JTAG允许用户与微控制器的各个部分进行对话。在许多情况下,这涉及一组指令或对电路板进行编程。JTAG标准定义了5个引脚: TCK: Test Clock TMS: Test Mode Select TDI: Test Data-…

Linux UDP 编程详解

一、引言 在网络编程领域&#xff0c;UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;作为一种轻量级的传输层协议&#xff0c;具有独特的优势和适用场景。与 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff0…

OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为已校准的立体相机的每个头计算校正变换。 cv::stereoRectify 是 OpenCV 中用于立体校正的函数&#xff0c;它基于已知的相机参数和相对位置&am…

AWS物联网连接的数据记录器在冰川环境中的性能比较:Campbell CR1000X与ESP32开源

论文标题 中文&#xff1a;AWS物联网连接的数据记录器在冰川环境中的性能比较&#xff1a;Campbell CR1000X与ESP32开源 英文&#xff1a;Performance comparison of AWS IoT connected dataloggers in glacier environments: Campbell CR1000X vs. ESP32 Open source 作者信…

K8S 节点选择器

今天我们来实验 pod 调度的 nodeName 与 nodeSelector。官网描述如下&#xff1a; 假设有如下三个节点的 K8S 集群&#xff1a; k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8…

Python爬虫学习前传 —— Python从安装到学会一站式服务

早上好啊&#xff0c;大佬们。我们的python基础内容的这一篇终于写好了&#xff0c;啪唧啪唧啪唧…… 说实话&#xff0c;这一篇确实写了很久&#xff0c;一方面是在忙其他几个专栏的内容&#xff0c;再加上生活学业上的事儿&#xff0c;确实精力有限&#xff0c;另一方面&…

【书生大模型实战营】Git 基础知识-L0G3000

本文是书生大模型实战营系列的第三篇文章&#xff0c;本文的主题是&#xff1a;Git基础知识点。 原始教程链接&#xff1a;Tutorial/docs/L0/git/readme.md at camp4 InternLM/Tutorial 1.Git总览 什么是Git&#xff1f; Git是一个分布式版本控制系统&#xff0c;广泛用于…

基于SpringBoot+Vue旅游管理系统的设计和实现(源码+文档+部署讲解)

个人名片 &#x1f525; 源码获取 | 毕设定制| 商务合作&#xff1a;《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片环境需要技术栈功能介绍功能说明 环境需要 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&…

python如何解析word文件格式(.docx)

python如何解析word文件格式&#xff08;.docx&#xff09; .docx文件遵从开源的“Office Open XML标准”&#xff0c;这意味着我们能用python的文本操作对它进行操作&#xff08;实际上PPT和Excel也是&#xff09;。而且这并不是重复造轮子&#xff0c;因为市面上操作.docx的…

Visual Studio2019调试DLL

1、编写好DLL代码之后&#xff0c;对DLL项目的属性进行设置&#xff0c;选择待注入的DLL&#xff0c;如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后&#xff0c;按F5启动调试。弹出选择注入的exe的界面之后&#xff0c;使用代码注入器注入步骤2中生成的dll&#xff…

nginx 配置防爬虫

今天早上查看服务器&#xff0c;发现昨天发布的一个在线解析充电桩协议的网页工具有大量的访问记录&#xff0c;应该是爬虫在爬api接口数据。该工具api接口后台用的是python写的&#xff0c;和大多数项目一样也采用nginx反向代理&#xff0c;由于采用nginx&#xff0c;可以利用…

日志收集Day001

1.ElasticSearch 作用&#xff1a;日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml&#xff08;这里yy做了别名&#xff0c;过滤掉空行和注释行&#xff09; yy /etc/el…

微信小程序-base64加解密

思路&#xff1a;先创建一个base64.js的文件&#xff0c;这个文件可以作为专门加解密的文件模块&#xff0c;需要时就引用&#xff1b;创建好后&#xff0c;引用base64.js里的加解密函数。 注意&#xff1a;引用模块一定要引用正确的路径&#xff0c;否则会报错。 base64.js:…

【网络协议】【http】【https】AES-TLS1.2

【网络协议】【http】【https】AES-TLS1.2 https并不是一个协议 而是在传输层之间添加了SSL/TLS协议TLS TLS 协议用于应用层协议&#xff08;如 HTTP&#xff09;和传输层&#xff08;如 TCP&#xff09;之间&#xff0c;增加了一层安全性来解决 HTTP 存在的问题&#xff0c;H…

打造更安全的Linux系统:玩转PAM配置文件

在Linux系统中&#xff0c;用户认证是确保系统安全的关键步骤。PAM&#xff08;可插拔认证模块&#xff09;为我们提供了一个非常灵活的框架&#xff0c;帮助我们管理各种服务的认证过程。其中&#xff0c;/etc/pam.d目录是PAM配置的核心部分&#xff0c;这里存放了每个服务所需…

无人机技术架构剖析!

一、飞机平台系统 飞机平台系统是无人机飞行的主体平台&#xff0c;主要提供飞行能力和装载功能。它由机体结构、动力装置、电气设备等组成。 机体结构&#xff1a;无人机的机身是其核心结构&#xff0c;承载着其他各个组件并提供稳定性。常见的机身材料包括碳纤维、铝合金、…

【西藏乡镇界面】图层arcgis格式shp数据有乡镇名称和编码2020年wgs84坐标内容测评

西藏乡镇界面图层arcgis格式shp数据有乡镇名称和编码2020年wgs84坐标无偏移