LocalStorage封装一次解决方法示例

目录
  • 1. 封装基础的方法
  • 2. 使用的封装
  • 3. 清除
  • 总结

1. 封装基础的方法

首先对于localStorage做一个基础的封装,封装出 get 、set 、del 这几个基本的方法。这一步是方便后续的调用

新建一个storage文件

const storage = {
   get(key) {
      if (!key) {
          return null
      }
      key = key.toString();
      const data = window.localStorage.getItem(key);
      return JSON.parse(data);
   },
}

get方法首先判断key的值,再转换成字符串进行取值,最后再将返回的值使用JSON.parse进行解析即可

const storage = {
  set(key, value) {
    if (!key || !value) {
          return null
      }
    key = key.toString();
    window.localStorage.setItem(key, JSON.stringify(value));
  },
}

set方法判断不为空的情况下,将key转换字符串,再进行存储

const storage = {
  deleteKey(key: string) {
    if (!key) {
      return;
    }
    key = key.toString();
    window.localStorage.removeItem(key);
  },
  clear() {
    window.localStorage.clear();
  }
}

del方法 和 clear方法删除存储

这一步就是对localtorage做好了一个基础的封装

2. 使用的封装

这个时候需要先新建一个constants文件用来保存存储的字段

const constants = {
  USER_INFO: 'user_info',
  USER_MESSAGE: 'user_message',
}
export default constants;

封装一个用户相关的存储

// 引入storage 和 constants
import storage from "../stroage";
import constants from "../constants";
class userManage {
  static readonly USER_INFO = constants.USER_INFO
  // 暴露的获取用户信息的方法
  static getUserInfo() {
    return storage.get(userManage.USER_INFO);
  }
  static setUserInfo(value: unknown) {
    storage.set(userManage.USER_INFO, value);
  }
  static delUserInfo() {
    storage.deleteKey(userManage.USER_INFO);
  }
}
export default userManage;

这个时候我们调用起来就会很方便了只需要在逻辑处写上

userManage.getUserInfo()

这样就可以直接获取到存储的用户信息的内容,设置删除也可以直接调用

userManage.setUserInfo({name: 'yonghu'}) / userManage.delUserInfo();

3. 清除

场景:在用户退出登录的时候,有些存储是需要清除,而有些存储是不需要清除的。

方案:新建一个longStorageKeys文件,在constants基础之上长久保存内容

import constants from "./constants";
const longStorageKeys = {
  USER_INFO: constants.USER_INFO,
}
export default longStorageKeys;

清除的封装

import storage from "./stroage";
import longStorageKeys from "./longStorageKeys";
class clearStorageManage {
  // 清除所有的存储
  static clearLocalStorage() {
    storage.clear();
  }
  // 清除部分存储
  static incompletionClear() {
    let long_keys = Object.values(longStorageKeys);
    let local_keys = Object.values(window.localStorage);
    local_keys.map(key => {
      if (!long_keys.includes(key)) {
        window.localStorage.removeItem(key);
      }
    });
    return;
  }
}
export default clearStorageManage;

方法调用

clearStorageManage.clearLocalStorage()

可以扩展其他的清除,比如切换用户之后哪些需要/不需要的

总结

封装之后的结构

这样封装的好处

  • 调用起来方便,不会像没有封装之前笨重
  • 管理起来简单,对于存储的东西一目了然
  • 可以自定义解决一些问题,比如如果同一域名下项目使用同一字段导致的冲突,可以直接在storage封装的get与set方法中添加项目的标识

以上就是LocalStorage封装一次解决的详细内容,更多关于LocalStorage封装的资料请关注我们其它相关文章!

(0)

相关推荐

  • 关于localStorage的存储,读取,删除

    目录 localStorage的存储,读取,删除 localStorage存储 localStorage读取 localStorage删除 localStorage使用详解 1. localStorage 简介 2. 调试 localStorage 3. localStorage 的 CRUD localStorage的存储,读取,删除 localStorage存储 我们通过以下方式将数据储存到localStorage中 window.localStorage.setItem('key',val

  • js如何操作localstorage

    目录 js操作localstorage 1.首先封装一个全局方法 2.调用方法 js localstorage(本地存储)必知 HTML API 基本用法 生存期 数据结构 容量限制 域名限制 异常处理 JavaScript 存储对象 js操作localstorage localstorage是web前端常用的本地存储服务,它相对于cookie 有几个优势: ①数据存储量大 ②不会携带给后台,避免传输没用的数据 ③操作简便 1.首先封装一个全局方法 以便各个地方调用 export functio

  • JavaScript架构localStorage特殊场景下二次封装操作

    目录 前言 设计 设置 setStorage 获取 getStorage 获取所有值 删除 removeStorage 清空 clearStorage 加密.解密 使用 完整代码 前言 很多人在用 localStorage 或 sessionStorage 的时候喜欢直接用,明文存储,直接将信息暴露在:浏览器中,虽然一般场景下都能应付得了且简单粗暴,但特殊需求情况下,比如设置定时功能,就不能实现.就需要对其进行二次封装,为了在使用上增加些安全感,那加密也必然是少不了的了.为方便项目使用,特对常规

  • Vue项目如何保持用户登录状态(localStorage+vuex刷新页面后状态依然保持)

    目录 前言 一.实现效果 二.实现步骤及涉及要点 三.涉及代码 总结 前言 在前端项目开发中,实现用户的登陆注册功能时常常会有一个问题,那就是我们设置的登录状态,在浏览器页面刷新后就消失了,这其实只是因为我们没有保存用户状态. 这里小马演示使用的是 localStorage + vuex 方法(其他诸如 sessionStorage.cookie 等用法相同,只是功能有所区别). 一.实现效果 实现功能:用户登录成功后,刷新浏览器页面或者关闭浏览器再次打开网页后,登录状态依然保持,直到用户点击登

  • JavaScript中本地存储(LocalStorage)和会话存储(SessionStorage)的使用

    目录 前提知识 范例 示例1:将键值对提供给本地存储 示例2: 本地存储中设置键值对 示例3: 获取空值 示例 4:将数组存储在本地存储中 示例 5:从本地存储中获取数组 示例 6:从本地存储中获取数组? 示例 7:清除本地存储 示例 8:仅从本地存储中删除 Name1 键值对 会话存储 总结 我不会告诉你任何定义和概念,上车,读完这篇博客,你就会对本地存储(Local Storage) 和 会话存储(Session Storage)有一个清晰的认识. 前提知识 请按照我以下的步骤来: 1.在任

  • localStorage设置有效期和过期时间的简单方法

    目录 前言 实现思路 实现代码 总结 前言 总所周知localStorage默认是不会过期的,也没有可设置过期的api,如果要实现过期清除就需要自己实现一个api 实现思路 在Storage原型上新增两个方法setCanExpireLocal,getCanExpireLocal,分别用于设置和获取值 实现过期功能至少需要三个时间,存值时间,取值时间,有效时间 存取时间戳都是在函数被调用时在函数内通过Date.now()生成 有效时间在存值的时候传入 如果存值时间戳加上有效时间小于当前时间戳说明还

  • LocalStorage封装一次解决方法示例

    目录 1. 封装基础的方法 2. 使用的封装 3. 清除 总结 1. 封装基础的方法 首先对于localStorage做一个基础的封装,封装出 get .set .del 这几个基本的方法.这一步是方便后续的调用 新建一个storage文件 const storage = { get(key) { if (!key) { return null } key = key.toString(); const data = window.localStorage.getItem(key); retur

  • JavaScript使用链式方法封装jQuery中CSS()方法示例

    本文实例讲述了JavaScript使用链式方法封装jQuery中CSS()方法.分享给大家供大家参考,具体如下: 主要思路就是:返回this对象,将所获取的操作元素放入一个数组中.在原型中添加拓展方法 <html> <head> <title></title> </head> <body> <div id="one">aa</div> </body> <script typ

  • Java Web项目部署在Tomcat运行出错与解决方法示例

    本文实例讲述了Java Web项目部署在Tomcat运行出错与解决方法.分享给大家供大家参考,具体如下: 1.在部署Java Web项目的过程中,启动Tomcat出现报错提示 具体报错如下: Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config. The configuration may be corrupt or incomplete. 元素类型 "H

  • Android编程出现Button点击事件无效的解决方法示例

    本文实例讲述了Android编程出现Button点击事件无效的解决方法.分享给大家供大家参考,具体如下: 遇到这样一个问题,给一个界面上方的按钮添加了点击事件,但死活没反应,而放在界面下方的3个按钮,都有相应点击事件,百度了一下无非有两种可能: 1.button没有初始化或者button初始化多次,导致混乱. 2.button点击事件写错,无法监听. 但我确定的是这些都是没有错的,后来找到的原因是下方的scroll布局覆盖了上方的button的布局,使用了fill_parent,所以获取不到点击

  • nodejs nedb 封装库与使用方法示例

    本文实例讲述了nodejs nedb 封装库与使用方法.分享给大家供大家参考,具体如下: libs/nedb.js const Datastore = require('nedb'); function DB(database) { let options = { filename: database, autoload: true, }; this.db = new Datastore(options); } DB.prototype.limit = function(offset, limi

  • 理解Java中的内存泄露及解决方法示例

    本文详细地介绍了Java内存管理的原理,以及内存泄露产生的原因,同时提供了一些列解决Java内存泄露的方案,希望对各位Java开发者有所帮助. Java内存管理机制 在C++ 语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露. Java 语言对内存管理做了自己的优化,这就是垃圾回收机制. Java 的几乎所有内存对象都是在堆内存上分配(基本数据类型

  • Vue自定义指令封装节流函数的方法示例

    节流函数是web前端开发中经常用到的一个开发技巧,在input实时搜索,滚动事件等,为了避免过多消耗性能,我们都会使用节流函数.在<JavaScript高级程序设计>一书中有这样的一个例子: function throttle (method, context) { clearTimeout((method.tId)) method.tId = setTimeout(function () { method.call(context) }, 100) } function resizeDiv

  • Django跨域请求问题的解决方法示例

    前言 本文主要给大家介绍了关于Django跨域请求问题解决的几种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 几种方法: 使用django-cors-headers全局控制 使用JsonP,只能用于Get方法 在views.py里设置响应头,只能控制单个接口 django-cors-headers 首先安装 pip install django-cors-headers 然后在settings.py里配置一番就可以 INSTALLED_APPS = [ ... 'cor

  • c++11封装thread库的方法示例

    前言 c++11在语言层面上提供了对thread的支持,由于不同的平台提供了不同线程API,在语言层面提供了对thread的支持可以大大的减小代码移植的工作量. 本文将给大家详细介绍关于c++11封装thread库的相关内容,下面话不多说了,来一起看看详细的介绍吧 基本接口要求 要求std::thread的构造函数 template< class Function, class... Args > explicit thread( Function&& f, Args&

  • java生成csv文件乱码的解决方法示例 java导出csv乱码

    复制代码 代码如下: import java.io.File;import java.io.IOException;import java.util.List; import com.google.common.base.Charsets;import com.google.common.base.Joiner;import com.google.common.base.Preconditions;import com.google.common.collect.Lists;import com

随机推荐