当前位置: 首页 > news >正文

网站首页html制作代码淘宝做促销的网站

网站首页html制作代码,淘宝做促销的网站,竞价推广是什么工作,流程图 网站11vue3实战-----封装缓存工具 1.背景2.pinia的持久化思路3.以localStorage为例解决问题4.封装缓存工具 1.背景 在上一章节,实现登录功能时候,当账号密码正确,身份验证成功之后,把用户信息保存起来,是用的pinia。然而p…

11vue3实战-----封装缓存工具

  • 1.背景
  • 2.pinia的持久化思路
  • 3.以localStorage为例解决问题
  • 4.封装缓存工具

1.背景

在上一章节,实现登录功能时候,当账号密码正确,身份验证成功之后,把用户信息保存起来,是用的pinia。然而pinia一刷新之后内部的数据(比如token)就会消失。为了解决该问题,必须将pinia持久化。

2.pinia的持久化思路

常见的解决方法有sessionStorage和localStorage,大家可以根据公司的需求来选择。两种方法都能保证刷新时候pinia内部数据依然存在,只不过使用sessionStorage这种方法,当关闭浏览器的会话时候,数据会消失。

3.以localStorage为例解决问题

store/login/login.ts:

import { defineStore } from 'pinia'
import { accountLoginRequest } from '@/service/login/login'
import type { IAccount } from '@/types'
const useLoginStore = defineStore('login', {state: () => ({id: '',token: localStorage.getItem('token') ?? '',name: ''}),actions: {async loginAccountAction(account: IAccount) {// 1.账号登录, 获取token等信息const loginResult = await accountLoginRequest(account)this.id = loginResult.data.idthis.name = loginResult.data.namethis.token = loginResult.data.token// 2.进行本地缓存localStorage.setItem('token', this.token)}}
})
export default useLoginStore

以上就可以解决问题。但如果所有的数据都按以上的格式书写代码,比较麻烦。而且,当某些数据是复杂对象时候,用localStorage.setItem进行存储时候,需要用JSON.stringify将复杂对象转为字符串(localStorage、sessionStorage只能存储字符串类型的数据)。同时在state里面又需要将其用JSON.parse转回对象。
所以最好是将localStorage进行封装。

4.封装缓存工具

新建工具文件夹utils,新建一个cache.ts文件:
在这里插入图片描述
utils/cache.ts:

//枚举两种类型,表示localStorage和sessionStorage
enum CacheType {Local,Session
}class Cache {//localStorage和sessionStorage都是Storage类型;storage: Storageconstructor(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)}}removeCache(key: string) {this.storage.removeItem(key)}clear() {this.storage.clear()}
}
const localCache = new Cache(CacheType.Local)
const sessionCache = new Cache(CacheType.Session)
export { localCache, sessionCache }

在store/login/login.ts中使用缓存工具:

import { defineStore } from 'pinia'
import { accountLoginRequest } from '@/service/login/login'
import type { IAccount } from '@/types'
import { localCache } from '@/utils/cache'
//这里把字符串'token'换成常量更规范,减少了拼错字符串的可能性,所有“login/token”的地方都可以用LOGIN_TOKEN ;
const LOGIN_TOKEN = 'login/token'
const useLoginStore = defineStore('login', {state: () => ({id: '',token: localCache.getCache(LOGIN_TOKEN) ?? '',name: ''}),actions: {async loginAccountAction(account: IAccount) {// 1.账号登录, 获取token等信息const loginResult = await accountLoginRequest(account)console.log(loginResult)this.id = loginResult.data.idthis.name = loginResult.data.namethis.token = loginResult.data.token// 2.进行本地缓存localCache.setCache(LOGIN_TOKEN, this.token)}}
})export default useLoginStore

当然除了自己封装缓存工具,还可以用pinia持久化插件------pinia-plugin-persistedstate解决问题。可上网自行搜索一下。(https://blog.csdn.net/qq_44741577/article/details/135959968)。

http://www.yayakq.cn/news/348790/

相关文章:

  • 云南网站设计联系方式id怎么打开wordpress
  • 昆山企业网站建设广州网站建设seo
  • 淮南网站开发wordpress wp大学
  • 优质聊城做网站费用不属于网络虚拟财产
  • wordpress网站代码找网站开发
  • 网站建设的新发展国家商标注册查询官网入口
  • 做外贸网站的公司百度 网站改版了
  • 湘潭网站建设 磐石网络优质饮料代理招商网
  • 什么叫营销型网站长春网站制作诚推源晟
  • php儿童摄影网站源码中企动力科技股份有限公司销售
  • 宁波做网站哪家公司好用html制作网页代码
  • 微信网站开场动画用php做网站上传图片的代码
  • 上海专门做网站的公司网页制作的超文本标记语言称为
  • 怎样选择 网站建设广告设计网站都有哪些
  • 织梦cms做网站金沙网站怎么做代理
  • 程序员做的导航网站免费杂志排版软件
  • 团队网站怎么做外呼系统
  • 点击网站出现微信二维码的链接怎么做富阳网站建设服务
  • 电子商务网站的建设和维护网页设计创意主题
  • 网站建设要做些什么问题wordpress网站界面设计
  • 亳州网站建设公司北滘网站建设公司
  • 网址导航网站建站彩票网站 在哪里做
  • 桂林市天气预报系统优化升级95%后不动了
  • 会外语和做网站天津专业做网站的公司有哪些
  • 响应式网站有什么好处wordpress五分钟安装
  • 网站功能有哪些家庭网络设计方案
  • 个人网站建设规划实践报告网站运营推广怎么做
  • 建网站怎么备案中国建设工程信息网一体化平台
  • 个人兴趣图片集网站建设滨州建网站
  • 做网站需要哪些知识该网站尚未备案 腾讯云