微信小程序在使用頁面棧保存頁面信息時,如何避免數據丟失?

微信小程序在使用頁面棧保存頁面信息時避免數據丟失的方法:

一、使用全局變量存儲關鍵數據

  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.pswp.cn/web/66119.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66119.shtml
英文地址,請注明出處:http://en.pswp.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…