在项目中使用localStorage和sessionStorage方法的封装
1. 新建utils/cache.ts文件
// 使用枚举
enum CacheType {
Local,
Session
}
class Cache {
storage: Storage
constructor(type: CacheType) {
this.storage = type === CacheType.Local ? localStorage : sessionStorage
}
setCache(key: string, value: any) {
if (value) {
this.storage.setItem(key, JSON.stringify(value))
}
}
getCache(key: string) {
const value = this.storage.getItem(key)
if (value) {
return JSON.parse(value)
}
}
deleteCache(key: string) {
this.storage.removeItem(key)
}
clearCache() {
this.storage.clear()
}
}
const localCache = new Cache(CacheType.Local)
const sessionCache = new Cache(CacheType.Session)
export { localCache, sessionCache }
2. 使用
import { LOGIN_TOKEN } from '@/constant' // 常量文件夹,用来定义常量的
import { accountLogin } from '@/service/login/login'
import type { IAccount } from '@/types'
import { localCache } from '@/utils/cache'
import { defineStore } from 'pinia'
const useLoginStore = defineStore('login', {
state: () => ({
id: '',
name: '',
token: localCache.getCache(LOGIN_TOKEN) ?? '' // 没有的话就设为空字符串
}),
actions: {
async loginAccountAction(account: IAccount) {
// 1.账号登陆,获取token
const loginResult = await accountLogin(account)
console.log('res==>', loginResult)
this.id = loginResult.data.id
this.name = loginResult.data.name
this.token = loginResult.data.token
// 2.进行本地化存储
localCache.setCache(LOGIN_TOKEN, this.token)
}
}
})
export default useLoginStore