当前位置:网站首页>Pinia状态持久化
Pinia状态持久化
2022-07-29 13:55:00 【Ocean!!】
前言
在vue3中,常用Pinia代替Vuex来进行状态管理。这里贴上Pinia的官网,有兴趣的可以去了解一下。Pinia
其他过程就省略了,今天在vue3中实现一个最简单的Pinia持久化插件,后续可能会进一步封装
// FilePath < @/main.ts >
import {
createApp, toRaw } from 'vue'
import App from './App.vue'
// 引入pinia
import {
createPinia, PiniaPluginContext } from "pinia";
const app = createApp(App)
type Options = {
key?: string
}
// 默认的key
const __piniaKey__: string = 'Ocean'
// 负责存储的函数
const setStorage = (key: string, value: any) => {
// 将对象转字符串后存入 localStorage
localStorage.setItem(key, JSON.stringify(value))
}
// 负责取值的函数
const getStorage = (key: string) => {
// 根据key拿到localStorage中对应的值
return localStorage.getItem(key) ? JSON.parse(localStorage.getItem(key) as string) : {
}
}
// Pinia持久化插件
const piniaPlugin = (options: Options) => {
return (context: PiniaPluginContext) => {
const {
store } = context
const data = getStorage(`${
options?.key ?? __piniaKey__}-${
store.$id}`)
console.log(data);
store.$subscribe(() => {
// store.$state是一个 proxy 对象 要通过 toRaw() 转换成 原始对象
setStorage(`${
options?.key ?? __piniaKey__}-${
store.$id}`,toRaw(store.$state))
})
return {
...data
}
}
}
// 创建一个Pinia实例
const store = createPinia()
// 注册插件
store.use(piniaPlugin({
key: 'pinia'
}))
app.use(store)
app.mount('#app')
边栏推荐
- The key to cracking AI full-process development problems
- Gdb debugging common concepts finishing
- 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
- Some thoughts on paying for knowledge
- 升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
- The new technical director, who is in the form of a isXxx Boolean type definition, tomorrow need not come!
- grid的使用
- trivy如何从非关系型数据库查询数据
- 线上支付,出款和收款
- 程序员是职业病高发群体,别天真的以为只有秃头那么简单,才不是呢。
猜你喜欢

全开放式耳机怎么样?不塞耳朵的蓝牙耳机推荐

新来技术总监:谁在用 isXxx 形式定义布尔类型,明天不用来了!

【Postman】下载与安装(新手图文教程)

阿里巴巴 CTO 程立:开源是基础软件的源头!

Programmers are a group with a high incidence of occupational diseases. Don’t be naive to think that it’s just as simple as being bald.

国内helm快速安装和添加常用charts仓库

TCP和UDP的基本认识

R Error in :missing values are not allowed in subscripted assignments of data frames

TAP 文章系列-10 | 从应用感知能力谈 TAP 的约定服务

Vscode搭建ESP32-C3开发环境
随机推荐
The key to cracking AI full-process development problems
计算机专业面试进阶指南
项目经理:不错啊!SSO单点登录代码写出来了,把时序图也画一下?
基于降噪自编码器与改进卷积神经网络的采煤机健康状态识别
程序员是职业病高发群体,别天真的以为只有秃头那么简单,才不是呢。
C#实现线程管理类
日志打印不规范,被CTO骂了一顿~
如何返回一个数字的所有质因数?
[局域网劫持]如何搞懵蹭网的同学-详细过程
leetcode134. 加油站
共享内存 - shmget填坑记
torchvison里面的数据增强
企业需要知道的5个 IAM 最佳实践
蚂蚁三面滑铁卢!遭分布式截胡,靠这些笔记潜修30天,挺进京东
小程序开发模板设计怎么做?
何为擦除机制,泛型的上界?
【JS面试题】面试官问我:遍历一个数组用 for 和 forEach 哪个更快?
力扣541. 反转字符串 II ----双指针解法
城市污水处理过程模型预测控制研究综述
4519. 正方形数组的数目