sessionStorage和localStorage的封装 typescript+vue3

在写项目的时候,需要储存一些东西为页面之间数据传递,第一个想到的就是vuex,但是你会发现有时候页面刷新一下存在vuex里面的数据就会丢失。

import {
          
    createStore } from vuex


export default createStore({
          
   
  state: {
          
   
    
  },
  mutations: {
          
   
  },
  actions: {
          
   
  },
  modules: {
          
   
    
  }
})

HTML5的WebStorage提供了两种API localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。 sessionStorage只存在于当前会话页面,当会话结束后,数据也随之销毁,在不同的浏览器窗口中共享。也就是存在于当前浏览器页面,页面关闭,数据也会删除。(注意:通过鼠标右键打开的新标签无法共享sessionStorage)

sessionStorage和localStorage他们均只能存储字符串类型的对象 所以你不可能每次储存的时候都去转化一次,那样会很麻烦的,也不好管理

所以自己就封装一个类使用HTML5的WebStorage提供了两种API 最后再实例化

在/utils/storage/index.ts

interface strorageFunType{
          
   
    getItem(key:string):any;
    setItem(key:string,value:string):void;
    removeItem(key:string):void;
    clear():void;
}

// sessionStorage  因为每次进行对象存储的时候要进行转化就很麻烦,所以每次就封装函数直接调用
class sessionStorageProxy implements strorageFunType{
          
   
    private storage:strorageFunType;
    constructor (storageModel:strorageFunType){
          
   
        this.storage=storageModel;
    }
    getItem(key: string):any {
          
   
       return JSON.parse(this.storage.getItem(key))||null
    }
    setItem(key: string, value: string): void {
          
   
         this.storage.setItem(key,JSON.stringify(value))
    }
    removeItem(key: string): void {
          
   
       this.storage.removeItem(key)
    }
    clear(): void {
          
   
       this.storage.clear();
    }

    
}
// 本地储存也一样,只要继承一次就行
class localStorageProxy extends sessionStorageProxy implements strorageFunType{
          
   
    constructor(localStorage:strorageFunType){
          
   
        super(localStorage)
    }

}

export const storageSession = new sessionStorageProxy(sessionStorage);//调用系统的session
export const storageLocal= new localStorageProxy(localStorage)
经验分享 程序员 微信小程序 职场和发展