uni-app 经验分享,从入门到离职(五)——由浅入深 uni-app 数据缓存

news2024/9/23 5:29:18

文章目录

  • 📋前言
    • ⏬关于专栏
  • 🎯什么是数据存储
    • 🧩数据存储——存储
      • 📌 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.coloradmin.cn/o/1468042.html

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

相关文章

【前端素材】推荐优质后台管理系统Start Admin平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

【论文阅读】ICCV 2023 计算和数据高效后门攻击

文章目录 一.论文信息二.论文内容1.摘要2.引言3.主要图表4.结论 一.论文信息 论文题目: Computation and Data Efficient Backdoor Attacks(计算和数据高效后门攻击) 论文来源: 2023-ICCV(CCF-A) 论文团…

Leetcoder Day20| 二叉树 part09+总结

语言:Java/Go 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移…

一些不得不知道的概念!吴恩达deeplearning.ai:人工智能的导论

文章目录 强人工智能 AGI人工智能的分类深度学习AGI可能实现的一些证据一种学习算法的假设具体的例子 为什么人工智能如此高效 以下内容有任何不理解可以翻看我之前的博客哦 强人工智能 AGI 强人工智能也叫做通用人工智能,是人工智能学科发展的一个重要目标。 人…

Bean的声明周期

1.创建Bean对象(调用无参数构造) 2.给bean对象设置相关属性(依赖注入) 3.bean后置处理器(初始化前执行,类似于过滤器和拦截器) 首先要定义一个类MyBeanPost,实现BeanPostProcessor…

Linux基础 7:自定义shell的编写

自定义shell的编写 一.自定义shell的编写。1.打印命令行提示符。2.获取用户输入字符串进行字符串分割保存。3.调用系统调用接口执行命令(使用子进程)4.对于内建命令的特殊处理。1.cd2.cd 特殊符号识别: 5.export和echo作为内建命令&#xff1…

动态规划3,地下城游戏

思路: 经验题目要求 a.以某个位置为结尾… dp[i][j]表示:走到【i,j】位置的时候,所需要的最初最低血量。 b.以某个位置为起点 dp[i][j]表示,从【i,j】出发,到达终点,所需要的最低初…

微信小程序云开发入门

写在前面: 参考的课程是咸虾米老师在b站的课:2.2.在页面展现云数据库的内容_哔哩哔哩_bilibili 云开发官方文档:微信开放文档 1、什么是云开发? 用自己的话来说就是把服务器和后台都搭在腾讯开发的服务器上。 2、如何开通云开发…

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-WatchDog

目录 一、 WATCHDOG 概述功能简介基本概念 二、WATCHDOG 模块相关API三、WATCHDOG HDF驱动开发3.1、开发步骤(待续...) 坚持就有收获 一、 WATCHDOG 概述 功能简介 看门狗(Watchdog),又称看门狗计时器(Watchdog timer&#xff0…

【AI数字人-论文】RAD-NeRF论文

文章目录 前言模型框架动态的NeRF前处理头部模型音频特征眼部控制头部总体表示 躯干模型loss 结果参考 【AI数字人-论文】AD-NeRF论文 前言 本篇论文有三个主要贡献点: 提出一种分解的音频空间编码模块,该模块使用两个低维特征网格有效地建模固有高维音…

关于Kinect 互动沙盘 深度图 Shader Graph 分层

把Kinect的深度图穿给Shader Graph using com.rfilkov.kinect; using UnityEngine; using UnityEngine.UI; public class GetDepthTex : MonoBehaviour { public Material Mat_SandTable; void Update() { Mat_SandTable.SetTexture("_MainTex"…

LabVIEW串口通信的激光器模块智能控制

LabVIEW串口通信的激光器模块智能控制 介绍了通过于LabVIEW的VISA串口通信技术在激光器模块控制中的应用。通过研究VISA串口通信的方法和流程,实现了对激光器模块的有效控制,解决了数据发送格式的匹配问题,为激光器模块的智能控制提供了一种…

Open CASCADE学习|几何数据结构

在几何引擎内一般把数据分成两类:几何信息与拓扑信息。二者可以完整地表达出实体模型,彼此相互独立、又互相关联。几何信息是指构成几何实体的各几何元素在欧式空间中的位置、大小、尺寸和形状信息。例如一条空间的直线,可以用两端点的位置矢…

019—pandas 计算实验仪器正常运行周期时长

需求: 对指定两个状态作为一个周期,并计算出周期内的差值,写到周期结束所在的行上。pandas 非常适合实现此类有着较为复杂逻辑的问题。 思路: 这个问题的难点是状态的不规律性,如何才能准确找出所有 T 和 C 的周期。…

python 打包 apk

转换之前python代码需要使用指定的框架才能转换,列如:kivy from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Buttonimport time import pyautogui import threadingstatus False# 这是一个将被线程执…

本博客工程源码总目录----方便你快速找到自己喜欢的项目

目录 1、前言2、本人项目总分类3、FPGA图像处理类项目-->快速查找3.1、图像采集-->MIPI视频类3.2、图像采集-->SDI视频类3.3、图像采集-->PAL视频类3.4、图像采集-->Cmeralink视频类3.5、图像转换-->LVDS视频转换3.6、图像缩放(纯Verilog版本HLS版…

QEMU开发入门

1. 简介 QEMU(Quick EMUlator)是一个开源的虚拟化软件,它能够模拟多种硬件平台,并在这些平台上运行各种操作系统。QEMU可以在不同的主机架构之间进行虚拟化,例如x86、ARM、PowerPC、Risc-V等。QEMU是一个功能强大且灵…

【竞技宝jjb.lol】LOL:wayward奎桑提主宰团战 WE2-1力克IG

北京时间2024年2月24日,英雄联盟LPL2024春季常规赛继续进行,昨日共进行三场比赛,第二场比赛由IG对阵WE。本场比赛双方前两局战至1-1平,决胜局WE中期抓住IG失误后拿下大龙奠定胜局,最终WE2-1力克IG。以下是本场比赛的详…

二次元风格个人主页HTML源码

源码介绍 直接上传服务器压缩包解压就完事了,修改index.html内代码即可,注释写的很全,替换图片在文件夹img,只有前端,没有后台,大佬如果需要,可以自行添加后台。本源码非常适合个人工作室主页。…

利用psutil库检查脚本是否在运行

摘要 如果要判断某一脚本是否在运行,可以通过psutil库获取所有进程的cmdline,并判断指定的文件名是否在cmdline中。 目录 1.psutil库简介 2.检查代码及说明 2.1检查思路 2.2异常捕获 2.3执行方法 1.psutil库简介 psutil 是一个跨平台(…