学习Pinia 第七章(pinia插件)

pinia 和 vuex 都有一个通病 页面刷新状态会丢失

我们可以写一个pinia 插件缓存他的值

视频教程(强烈建议) Vue3 + vite + Ts + pinia + 实战 + 源码_哔哩哔哩_bilibili

const __piniaKey = '__PINIAKEY__'
//定义兜底变量


type Options = {
   key?:string
}
//定义入参类型



//将数据存在本地
const setStorage = (key: string, value: any): void => {

localStorage.setItem(key, JSON.stringify(value))

}


//存缓存中读取
const getStorage = (key: string) => {

return (localStorage.getItem(key) ? JSON.parse(localStorage.getItem(key) as string) : {})

}


//利用函数柯丽华接受用户入参
const piniaPlugin = (options: Options) => {

//将函数返回给pinia  让pinia  调用 注入 context
return (context: PiniaPluginContext) => {

const { store } = context;

const data = getStorage(`${options?.key ?? __piniaKey}-${store.$id}`)

store.$subscribe(() => {

setStorage(`${options?.key ?? __piniaKey}-${store.$id}`, toRaw(store.$state));

})

//返回值覆盖pinia 原始值
return {

...data

}

}

}


//初始化pinia
const pinia = createPinia()


//注册pinia 插件
pinia.use(piniaPlugin({

key: "pinia"

}))

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小满zs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值