uni-app 經驗分享,從入門到離職(五)——由淺入深 uni-app 數據緩存

文章目錄

  • 📋前言
    • ?關于專欄
  • 🎯什么是數據存儲
    • 🧩數據存儲——存儲
      • 📌 uni.setStorage(OBJECT)
      • 📌 uni.setStorageSync(KEY,DATA)
    • 🧩數據存儲——獲取
      • 📌 uni.getStorage(OBJECT)
      • 📌 uni.getStorageSync(KEY)
      • 📌 uni.getStorageInfo(OBJECT)
      • 📌 uni.getStorageInfoSync()
    • 🧩數據存儲——刪除
      • 📌 uni.removeStorage(OBJECT)
      • 📌 uni.removeStorageSync(KEY)
      • 📌 uni.clearStorage()
      • 📌 uni.clearStorageSync()
    • 🧩注意事項
  • 📝最后


在這里插入圖片描述

📋前言

這篇文章是本專欄 uni-app 的基礎篇的第五章,文章的主要內容是關于 uni-app 數據緩存的相關知識,包括如何使用 uni-app 提供的數據緩存 API 進行數據的獲取、存儲和刪除操作。

?關于專欄

本專欄主要是分享和介紹從零到一學習和使用的 uni-app 的筆記和個人經驗。通過個人的學習經驗和工作經驗來給大家分享關于 uni-app 開發的技巧,以及快速入門的訣竅等等。

專欄主頁:uni-app_黛琳ghz的博客-CSDN博客


🎯什么是數據存儲

在軟件開發中,數據存儲指的是將應用程序中的數據保存在本地或者云端的一種機制,讓開發者可以隨時讀取和修改這些數據。數據存儲可以提高應用程序的性能和用戶體驗,存儲好的數據可以避免每次打開應用程序都需要從服務器獲取數據。

在實際 uni-app 開發小程序時,數據緩存是一個非常重要技術點。數據緩存可以將應用程序中的數據保存在本地,比如說登錄成功后,可以把 sessionId 、accountId、賬號等等登錄成功后返回信息緩存到本地,這樣就不用每次調用接口都需要從服務器獲取這些數據。如下圖調用登錄接口,登陸成功以后,緩存以下信息到本地存儲。
在這里插入圖片描述
通過上面的簡單描述,我們對數據存儲已經有了一定了解,接下來我們一起看下在 uni-app 中有哪些數據存儲的 API 。首先對數據存儲的操作進行分類,分為存儲、獲取、刪除。

注意:在介紹各個方法之前,我們要留意區分各個方法是同步還是異步的操作,其中我們可以根據關鍵詞 “Sync” 來區分,方法中含有這個詞的方法為同步方法。

🧩數據存儲——存儲

數據存儲的第一步就是要把需要的值存儲到本地,存儲了數據才有對應其他操作(獲取和刪除)。接下來我們來看一下怎么把需要的值存儲到程序本地。

📌 uni.setStorage(OBJECT)

通過傳入一個包含 key 和 data 屬性的對象 OBJECT 來指定要存儲的數據。其中,key 是要存儲的數據的唯一標識符,data 是要存儲的數據。存儲的數據可以是 JavaScript 對象、字符串、數字等類型。(異步操作)

參數說明

參數名類型必填說明
keyString本地緩存中的指定的 key
dataAny需要存儲的內容,只支持原生類型、及能夠通過 JSON.stringify 序列化的對象
successFunction接口調用成功的回調函數
failFunction接口調用失敗的回調函數
completeFunction接口調用結束的回調函數(調用成功、失敗都會執行)

示例代碼

uni.setStorage({key: 'storage_key',data: 'hello uni-app',success: function () {console.log('success');}
});

📌 uni.setStorageSync(KEY,DATA)

將數據同步存儲到本地緩存中,其中 key 是存儲的鍵名,data 是要存儲的數據。(同步操作)

參數說明

參數類型必填說明
keyString本地緩存中的指定的 key
dataAny需要存儲的內容,只支持原生類型、及能夠通過 JSON.stringify 序列化的對象

示例代碼

try {uni.setStorageSync('storage_key', 'hello');
} catch (e) {// error
}

🧩數據存儲——獲取

通過上面的方法。我們把數據存儲到本地以后,我們就可以獲取這些數據,直接進行使用,不用再重新調用獲取。接下來我們來看一下怎么獲取到存儲到本地的值。

📌 uni.getStorage(OBJECT)

從本地緩存中異步獲取指定 key 對應的內容。(異步操作)

參數說明

參數名類型必填說明
keyString本地緩存中的指定的 key
successFunction接口調用的回調函數,res = {data: key對應的內容}
failFunction接口調用失敗的回調函數
completeFunction接口調用結束的回調函數(調用成功、失敗都會執行)

success 返回參數說明

參數類型說明
dataAnykey 對應的內容

示例代碼

uni.getStorage({key: 'storage_key',success: function (res) {console.log(res.data);}
});

📌 uni.getStorageSync(KEY)

該方法可以根據鍵名 key 同步獲取相應的存儲數據。(同步操作)

參數說明

參數類型必填說明
keyString本地緩存中的指定的 key

上面介紹數據存儲的時候,在程序中存儲了一個值為 islogin,然后我們通過 uni.getStorageSync 來獲取一下這個值。代碼和結果圖如下。

console.log('islogin:' + uni.getStorageSync('islogin'))

在這里插入圖片描述

📌 uni.getStorageInfo(OBJECT)

異步獲取當前 storage 的相關信息。(異步操作)

參數說明

參數名類型必填說明
successFunction接口調用的回調函數,詳見返回參數說明
failFunction接口調用失敗的回調函數
completeFunction接口調用結束的回調函數(調用成功、失敗都會執行)

success 返回參數說明

參數類型說明
keysArray當前 storage 中所有的 key
currentSizeNumber當前占用的空間大小,單位:kb
limitSizeNumber限制的空間大小,單位:kb

示例代碼

uni.getStorageInfo({success: function (res) {console.log(res.keys);console.log(res.currentSize);console.log(res.limitSize);}
});

在這里插入圖片描述

📌 uni.getStorageInfoSync()

同步獲取當前 storage 的相關信息。具體參數同上,只是該方法為同步操作。

示例代碼

try {const res = uni.getStorageInfoSync();console.log(res.keys);console.log(res.currentSize);console.log(res.limitSize);
} catch (e) {// error
}

🧩數據存儲——刪除

📌 uni.removeStorage(OBJECT)

從本地緩存中異步移除指定 key。(異步操作)

參數說明

參數名類型必填說明
keyString本地緩存中的指定的 key
successFunction接口調用的回調函數
failFunction接口調用失敗的回調函數
completeFunction接口調用結束的回調函數(調用成功、失敗都會執行)

示例代碼

uni.removeStorage({key: 'storage_key',success: function (res) {console.log('success');}
});

📌 uni.removeStorageSync(KEY)

從本地緩存中同步移除指定 key。(同步操作)

參數說明

參數名類型必填說明
keyString本地緩存中的指定的 key

我們可以看下這段代碼刪除數據前后的輸出值。

	console.log('刪除前islogin:' + uni.getStorageSync('storage_key'))uni.removeStorageSync('storage_key');console.log('刪除后islogin:' + uni.getStorageSync('storage_key'))

在這里插入圖片描述

📌 uni.clearStorage()

用于清空本地緩存的方法。調用該方法會將所有存儲在本地緩存中的數據全部清除。

📌 uni.clearStorageSync()

用于同步清空本地緩存的方法。調用該方法會將所有存儲在本地緩存中的數據全部清除。(同步操作)

二者區別
首先拋開異步和同步的操作,無論是 remove 和 clear 都是可以刪除本地存儲的數據,但是二者的刪除方式又是有區別的,這里我們以 uni.clearStorageSync() 和 uni.removeStorageSync 為例子進行對比。

  • uni.clearStorageSync() 方法用于清空所有本地緩存數據,即一次性刪除所有存儲的數據;而 uni.removeStorageSync(key) 方法用于刪除指定鍵名(key)對應的單個數據,只刪除特定的數據而不影響其他數據。
  • uni.removeStorageSync(key) 方法需要傳入要刪除的數據的鍵名作為參數,而 uni.clearStorageSync() 方法不需要傳入任何參數。

使用場景

  • 退出登錄:在用戶退出登錄時,使用 uni.removeStorageSync(key) 方法刪除與當前用戶相關的單個本地緩存數據。例如,可以刪除用戶登錄憑證或其他與登錄狀態相關的數據,如下圖我們可以刪除對應的緩存 id。之所以不用 uni.clearStorageSync 刪除全部,是因為部分數據是需要保留到下次登錄的,比如說手機號碼、賬號登錄這種情況,我們退出登錄后回到登陸頁面,輸入框還可以保留上一個登錄用戶的登錄賬號或手機號。
    在這里插入圖片描述
  • 注銷賬號:在用戶選擇注銷賬號時,使用 uni.clearStorageSync() 方法清空所有本地緩存數據,確保用戶個人信息和數據被徹底清除,這樣做可以防止個人數據被保留在本地設備上。

在這里插入圖片描述


🧩注意事項

uni-app 的 Storage 在不同端的實現不同:

  • H5 端為 localStorage,瀏覽器限制 5 M大小,是緩存概念,可能會被清理
  • App端為原生的 plus.storage,無大小限制,不是緩存,是持久化的
  • 各個小程序端為其自帶的 storage api,數據存儲生命周期跟小程序本身一致,即除用戶主動刪除或超過一定時間被自動清理,否則數據都一直可用。
  • 微信小程序單個 key 允許存儲的最大數據長度為 1 MB,所有數據存儲上限為 10 MB。
  • 支付寶小程序單條數據轉換成字符串后,字符串長度最大 200*1024。同一個支付寶用戶,同一個小程序緩存總上限為 10 MB。
  • 非 App 平臺清空 Storage 會導致 uni.getSystemInfo 獲取到的 deviceId 改變。

📝最后

到此就是本篇文章的全部內容了,這篇文章記錄的主要內容的是關于 uni-app 數據緩存的相關知識,包括如何使用 uni-app 提供的數據緩存 API 進行數據的獲取、存儲和刪除操作。利用這些API,我們可以靈活地控制數據的存儲和管理,從而實現數據的持久化存儲、快速訪問和安全刪除。在實際開發過程中,合理利用 uni-app 提供的數據緩存 API,可以有效提升應用的性能和用戶體驗。這篇文章是博主 uni-app 專欄基礎篇的第五篇文章,后續會不斷的更新更多關于 uni-app 的干貨、實戰經驗、學習經驗,期待你的關注和留言。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年【起重機司機(限橋式起重機)】找解析及起重機司機(限橋式起重機)考試總結

題庫來源:安全生產模擬考試一點通公眾號小程序 2024年【起重機司機(限橋式起重機)】找解析及起重機司機(限橋式起重機)考試總結,包含起重機司機(限橋式起重機)找解析答案和解析及起重機司機(限橋式起重機)考試總結練習。安全生產模擬考試一點通結合國家…

[AI]部署安裝有道QanyThing

前提條件: 1、win10系統更新到最新的版本,系統版本最好為專業版本 winver 查看系統版本,內部版本要大于19045 2、CPU開啟虛擬化 3、開啟虛擬化功能,1、2、3每步完成后均需要重啟電腦; 注:windows 虛擬…

CSS輕松學:簡單易懂的CSS基礎指南

css基礎 更多web開發知識歡迎訪問我的專欄>>> 01-CSS初體驗 層疊樣式表 (Cascading Style Sheets,縮寫為 CSS),是一種 樣式表 語言,用來描述 HTML 文檔的呈現(美化內容)。 書寫位置:…

基于HAL庫的STM32-ADC學習(附帶代碼)

1.前言 STM32ADC是一種模擬/數字轉換器,可以將模擬信號轉換為數字信號。STM32ADC有多個通道,可以選擇不同的輸入源、轉換模式、觸發方式和采樣時間。STM32ADC的轉換結果可以通過中斷、DMA或者寄存器讀取。 在本文中,我將介紹如何使用STM32C…

第九屆大數據與計算國際會議 (ICBDC 2024) 即將召開!

2024年第九屆大數據與計算國際會議(ICBDC 2024)將于2024年5月24至26日在泰國曼谷舉行。本次會議由朱拉隆功大學工程學院工業工程系主辦。ICBDC 2024的宗旨是展示大數據和計算主題相關科學家的最新研究和成果,為來自不同地區的專家代表們提供一…

嵌入式學習筆記總結Day23----minshell項目總結

今天進行了linux系統高級編程io階段學習的結尾,完成了一個minshell的小項目。 一、項目介紹 利用Linux中IO接口實現MiniShell,實現常用的shell指令的實現。 項目想要實現需要思考的地方有: 1.如何打印終端命令 2.如何接受終端命令 3.實現對…

Sora - 探索AI視頻模型的無限可能-官方報告解讀與思考

一、引言 最近SORA火爆刷屏,我也忍不住找來官方報告分析了一下,本文將深入探討OpenAI最新發布的Sora模型。Sora模型不僅僅是一個視頻生成器,它代表了一種全新的數據驅動物理引擎,能夠在虛擬世界中模擬現實世界的復雜現象。本文將重…

[力扣 Hot100]Day33 排序鏈表

題目描述 給你鏈表的頭結點 head &#xff0c;請將其按 升序 排列并返回 排序后的鏈表 。 出處 思路 歸并排序即可。 代碼 class Solution { public:ListNode* merge(ListNode *h1,ListNode *h2) {ListNode *head nullptr;if(h1->val<h2->val){head h1;h1h1-…

2024.2.22 C++QT 作業

思維導圖 練習題 1>完善對話框&#xff0c;點擊登錄對話框&#xff0c;如果賬號和密碼匹配&#xff0c;則彈出信息對話框&#xff0c;給出提示”登錄成功“&#xff0c;提供一個Ok按鈕&#xff0c;用戶點擊Ok后&#xff0c;關閉登錄界面&#xff0c;跳轉到其他界面。如果賬…

Stream、Collections、Collectors用法

當涉及Java編程中的集合處理時&#xff0c;Stream、Collections和Collectors是三個常用的工具。以下是它們各自的主要功能和使用的一些方法的概要&#xff1a; Stream&#xff1a; 概要&#xff1a;Stream 是 Java 8 引入的一個強大工具&#xff0c;用于處理集合數據的流式操作…

Vue響應式狀態ref()與reactive()

1. ref()聲明響應式狀態 <template><!--在DOM元素調用變量時,不需要指定輸出變量的value,因為Vue會幫你輸出.value但是注意,這個幫助只會幫助頂級的ref屬性才會被解包--><div>{{ count }}</div><div>{{ object }}</div><div>{{ arr…

git切換倉庫地址

已有git倉庫&#xff0c;要切換提交的倉庫地址&#xff0c;用以下命令 git remote set-url origin 自己的倉庫地址 用以下命令&#xff0c;查看當前倉庫地址&#xff1a; git remote show origin 切換倉庫后&#xff0c;用以下命令初始化提交倉庫&#xff1a; git push -u o…

數據庫增刪改查

DDL: 數據定義語言&#xff0c;用來定義數據庫對象&#xff08;數據庫、表、字段&#xff09;DML: 數據操作語言&#xff0c;用來對數據庫表中的數據進行增刪改DQL: 數據查詢語言&#xff0c;用來查詢數據庫中表的記錄DCL: 數據控制語言&#xff0c;用來創建數據庫用戶、控制數…

c++11:可調用對象

文章目錄 引言1.普通函數2.函數指針3.函數對象(仿函數)4.Lambda表達式(匿名函數)5.function6.bind 引言 可調用對象是C11引入的新概念&#xff0c;可以像函數調用方式的觸發調用的對象就是可調用對象。 c98可調用對象(普通函數&#xff0c;函數指針&#xff0c;仿函數) c11可調…

Java設計模式【代理模式】

一、前言 1.1 背景 在不改變原有代碼的基礎上&#xff0c;對方法進行功能性的增強&#xff1b; 1.2 簡介 代理模式是一種結構型模式&#xff0c;為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下&#xff0c;一個對象不想或者不能直接引用另一個對象&#xff0…

axure9.0 工具使用思考

原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】…

CentOS使用Docker搭建Halo網站并實現無公網ip遠程訪問

&#x1f525;博客主頁&#xff1a; 小羊失眠啦. &#x1f3a5;系列專欄&#xff1a;《C語言》 《數據結構》 《C》 《Linux》 《Cpolar》 ??感謝大家點贊&#x1f44d;收藏?評論?? 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&…

【華為OD機試真題 C++語言】483、中文分詞模擬器 | 機試真題+思路參考+代碼解析(C卷)

文章目錄 一、題目??題目描述??輸入輸出??樣例1??樣例2??樣例3二、思路參考三、代碼參考作者:KJ.JK??個人博客首頁: KJ.JK ??專欄介紹: 華為OD機試真題匯總,定期更新華為OD各個時間階段的機試真題,每日定時更新,本專欄將使用C++語言進行更新解答,包含真…

創紀錄:英偉達市值一日增 2770 億美元;Xiaomi 14 Ultra 正式發布丨 RTE 開發者日報 Vol.150

開發者朋友們大家好&#xff1a; 這里是 「RTE 開發者日報」 &#xff0c;每天和大家一起看新聞、聊八卦。我們的社區編輯團隊會整理分享 RTE &#xff08;Real Time Engagement&#xff09; 領域內「有話題的 新聞 」、「有態度的 觀點 」、「有意思的 數據 」、「有思考的 文…

mysql 用戶權限管理

mysql使用系統庫mysql的user表來存儲用戶信息。mysql.user表詳細的記錄了用戶名&#xff0c;對應的允許連接的主機信息還有各種全局權限標識位。 用戶管理 創建用戶 CREATE USER 用戶名host主機 IDENTIFIED BY 密碼;上面是創建用的基本命令&#xff0c;指定了用戶名&#xf…