JS封装本地缓存的设置,读取,移除,清空方法及使用示例

我封装了一个JS通用的缓存管理对象,可以提供缓存的设置,读取,移除,清空操作,使用也很方便,封装方法的代码在最下方。

Q: 为什么不直接用原生的缓存方法,要封装?

A1:原生的缓存管理起来并不方便,这里设置一个,那里设置一个,设置的缓存多了以后,没有办法统一管理,并且读取的时候还需要使用JSON.parse才能读取对象;

A2:在我封装的缓存中,加入了模块的管理,例如user模块的缓存,专门放到user模块去维护,应用全局的缓存专门放到应用中维护;

A3:加入了字典说明,注释了每个模块的作用和属性,示例:
  字典说明:
  user 用户信息模块
  -userToken 用户唯一标识
  -userName 用户昵称
  -userInfo 用户详细信息

  app 全局模块
  -source 进入应用的来源标识
  -enterTime 进入应用的时间戳

如果我想清空用户模块user中的所有属性,调用 this.$KsStorage.remove('user') 就可以,不会影响到其它的缓存数据,也支持只清空某个模块的其中一个对象或者属性,例如 user 的 userToken ,调用 this.$KsStorage.remove('user','userToken') 就可以。

下面我们看看封装的说明。

封装JS缓存
  入参字段说明:
  group          模块分组                    必填
  key             模块指定字段             非必填
  value          模块指定字段的值      非必填
  
  使用示例:
  1、设置user模块的 userInfo 对象到缓存

  this.$KsStorage.set('user','userInfo',{name:1,head:2})

2、获取user模块的所有缓存或者获取 user 模块的的 userInfo 属性
 

 this.$KsStorage.get('user') or this.$KsStorage.get('user','userInfo')

3、移除 user 模块的所有缓存或者移除 user 模块的的 userInfo 属性

  this.$KsStorage.remove('user') or this.$KsStorage.remove('user','userInfo')

4、清空所有缓存

 this.$KsStorage.clear()

封装的 ksStorage.js 完整代码:

vue,html,uniapp,react 都可以用此封装方法,统一管理应用的本地缓存

/**缓存管理: 所有的缓存模板分组和字段说明都在本文件添加注释字段说明:group,  模块分组,必填key, 模块指定字段,非必填value, 模块指定字段的值,非必填使用示例:设置user模块的userInfo到缓存this.$KsStorage.set('user','userInfo',{name:1,head:2})获取user模块的所有缓存或者获取user模块的的userInfo属性this.$KsStorage.get('user') or this.$KsStorage.get('user','userInfo')移除user模块的所有缓存或者移除user模块的的userInfo属性this.$KsStorage.remove('user') or this.$KsStorage.remove('user','userInfo')清空所有缓存this.$KsStorage.clear()
**/
let KsStorage ={set:(group,key,value)=>{let obj =JSON.parse(localStorage.getItem(group))||{};obj[key] = value;localStorage.setItem(group, JSON.stringify(obj));},get:(group,key)=>{let obj = JSON.parse(localStorage.getItem(group))||{};return key?obj[key]:obj;},remove:(group,key)=>{if(key){let obj =JSON.parse(localStorage.getItem(group))||{};delete obj[key];  localStorage.setItem(group, JSON.stringify(obj));}else{localStorage.removeItem(group);}},clear:()=>{localStorage.clear();},
} 
export default KsStorage;

感觉还不错的话请点个收藏加点赞吧~  谢谢~

 

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

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

相关文章

Qt网络通信

1. UDP通信 1.1 udp通信的基本流程 创建套接字 绑定套接字 进行通信 关闭套接字 涉及到的类和信号 QUdpSocket:Udp套接字类,类对象就是一个udp套接字对象 QHostAddress:ip地址类 void readyRead():信号,当有数据到达可…

[足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05-3+4

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - Kalman Filter卡尔曼滤波器 Ch05-34 3. Step by step : Deriation of Kalmen Gain 卡尔曼增益/因数 详细推导4. Priori/Posterrori error Covariance Martix 误差协方差矩阵 3. Step by step :…

gh0st远程控制——客户端界面编写(一)

1、新建一个基于对话框的MFC程序 ghost内核对unicode支持不好,所以不要勾选 在静态库使用MFC有助于我们的代码供别人使用 2、设置窗口可最大最小化 对话框 》右键属性 3、 为对话框添加列表 一个代表列表框架,一个代表日志框架 分别为2个控件添加唯…

Umi3 创建,配置环境,路由传参(代码示例)

目录 创建项目 配置环境 创建脚手架 项目结构及其目录、 路由 配置路由 嵌套路由 编程式导航和声明式导航 声明式导航 编程式导航 约定式路由 路由传参 query传参(问号) 接收参数 params传参(动态传参) 接收参数 创…

精品量化公式——“筹码动态”,筹码动态改进版,增加了三个买点信号标识

不多说,直接上效果如图: ► 日线表现 代码评估 技术指标代码评估: 散筹估算: 使用EMA(指数移动平均)方法计算(WINNER(C*1.1)-WINNER(C*0.9))*70的3日均线,用黄色粗线表示。这是用于估算市场中散户投资者的…

【我与Java的成长记】之多态,重载与重写详解

系列文章目录 能看懂文字就能明白系列 C语言笔记传送门 Java笔记传送门 🌟 个人主页:古德猫宁- 🌈 信念如阳光,照亮前行的每一步 文章目录 系列文章目录🌈 *信念如阳光,照亮前行的每一步* 前言一、多态的概…

gitlab 部署项目新分支

公司代码管理平台新切换到gitlab下,上线发版流程随之变更 1新建分支,开发完成,提交新分支 2.去gitlab平台上找到Merge requests 3 点击右上角的New merge request select source branch 选择新建的分支 点击 compare branches and contin…

navigateTo失效-跳转不了页面解决办法!uniapp\vue

改了一个小时多的错误,跳转页面无论怎么样都跳转不了,有2个问题: 注意:uniapp的报错可以在console里检查! 1.pages.json文件没有配置路径, 在pages:[ ]里面加 (根据自己的路径进行修改 {&qu…

d2l包安装教程

目录 一、下载d2l包 1、错误的安装方法 2、正确的安装方法 二、可能会遇到的问题 1、网络超时导致下载中断 2、windows powershell激活虚拟环境时报错 一、下载d2l包 直接按照教程安装 — 动手学深度学习 2.0.0 documentation运行命令pip install d2l0.17.6安装会比较慢&…

如何实现 H5 秒开?

我在简历上写了精通 H5,结果面试官上来就问: 同学,你说你精通 H5 ,那你能不能说一下怎么实现 H5 秒 由于没怎么做过性能优化,我只能凭着印象,断断续续地罗列了几点: 网络优化:http2、…

为什么需要放行回源IP

为什么需要放行回源IP 网站以“独享模式”成功接入WAF后,所有网站访问请求将先经过独享引擎配置的ELB然后流转到独享引擎实例进行监控,经独享引擎实例过滤后再返回到源站服务器,流量经独享引擎实例返回源站的过程称为回源。在服务器看来&…

C++初阶类与对象(三):详解复制构造函数和运算符重载

上次介绍了构造函数和析构函数:C初阶类与对象(二):详解构造函数和析构函数 今天就来接着介绍新的内容: 文章目录 1.拷贝构造函数1.1引入和概念1.2特性 2.赋值运算符重载2.1运算符重载2.2放在哪里2.3运算符重载示例2.3.…

C++后端笔记

C后端笔记 资源整理一、高级语言程序设计1.1 进制1.2 程序结构基本知识1.3 数据类型ASCII码命名规则变量间的赋值浮点型变量的作用字符变量常变量 const运算符 二、高级语言程序设计(荣) 资源整理 C后端开发学习路线及推荐学习时间 C基础知识大全 C那…

element中表格组件的row-class-name和class-name属性的使用以及无效处理

1.这两个属性的使用&#xff0c;row-class-name用在el-table标签上&#xff0c;class-name用在el-table-column标签上。两个属性即可绑定类名也可绑定函数 <!-- 这里是绑定函数&#xff0c;也可以绑定类名 --> <el-table :data"tableData" selection-chang…

DB107-ASEMI插件小方桥DB107

编辑&#xff1a;ll DB107-ASEMI插件小方桥DB107 型号&#xff1a;DB107 品牌&#xff1a;ASEMI 正向电流&#xff08;Id&#xff09;&#xff1a;1A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;50A 正向电压&#xff08;VF&…

Linux指令(二)

1.指令&#xff1a;cd ~ 该指令表示进入家目录。 那么你可能会问了&#xff0c;什么是家目录呢&#xff1f; 定义&#xff1a;家目录&#xff0c;又叫主目录。实际上是指用户所在的根目录&#xff0c;例如&#xff1a;在windows系统下&#xff0c;我们的用户目录就是家目录&…

java基础:求数组的最值

方法一&#xff1a;顺序查找 先假设数组第一个元素为最值&#xff0c;然后和数组里的数按顺序进行比较得出最值&#xff0c;所以叫顺序查找。 代码如下 package idea;public class arr_int {public static void main(String[] args) { // 初始化一个数组int[] arr {12…

OpenGL Assimp加载各类型模型(.obj、.fbx、.glb、.3ds)

1.简介 本博客以.glb格式为例&#xff0c;加载glb格式的3d模型&#xff0c;网上找了一圈&#xff0c;基本上都是根据OpenGL官方示例&#xff0c;加载.obj格式的3d模型。 下面以.obj和.glb格式的3D模型简单介绍一下。 常见的.obj格式的3D模型如下所示&#xff1a;纹理都已经被…

往docker中cloudbeaver的容器添加达梦数据库、impala数据库连接支持(cloudbeaver添加自定义数据连接)

cloudbeaver默认没有开放impala连接&#xff0c;更不会支持国产数据库了 docker安装运行cloudbeaver可以参考文章&#xff1a;docker安装运行CloudBeaver并设置默认语言为中文 本文跳过cloudbeaver镜像拉取&#xff0c;直接就开始实现自定义数据库连接功能 1、初始化cloudbe…

C语言——atoi函数解析

目录 前言 atoi函数的介绍 atoi函数的使用 atoi函数的模拟实现 前言 对于atoi函数大家可能会有些陌生&#xff0c;不过当你选择并阅读到这里时&#xff0c;请往下阅读&#xff0c;我相信你能对atoi函数熟悉该函数的头文件为<stdlib.h> 或 <cstdlib> atoi函数的…