pinia-plugin-persist 持久化存储失效和使用过程必踩的坑
技术栈:vue3 + vue-Router ^4.0 + pinia 3.0 + pinia-plugin-persist 持久化存储
场景: vue-router 路由守卫 跳转前判断 pinia 状态 state的token是否存在 ,存在就跳转,不存在跳转到 登录页面。
科普一:pinia-plugin-persist 的使用
import { createPinia } from "pinia"
import piniaPluginPersist from 'pinia-plugin-persist'
const store = createPinia()
store.use(piniaPluginPersist)
export default store
配置 :
import { defineStore } from "pinia";
export const useUserStore = defineStore({
id: "user",
state: () => {
return {
token: ""
};
},
actions: {
setToken(token: string) {
this.token = token;
}
},
persist: {
enabled: true,
strategies: [
{
key: "your key",
storage: localStorage,
},
],
},
});
支持 localStorage,sessionStorage 。
踩的坑:
当配合 路由使用时,持久化 存储失效了
import { useUserStore } from '@/stores/user'
{ path: "/cart", name: "Cart", component: () => import(/* webpackChunkName: "cart" */ "../views/CartView.vue"), beforeEnter:(to, from, next)=>{ const userStore = useUserStore(); if( userStore.token ){ next(); }else{ next('/login'); } }
答案:

userStore 初始化 必须放在 路由守卫里 才会生效, 必须放在 路由守卫里 才会生效, 必须放在 路由守卫里 才会生效。放在外面,持久化会失效,记录一下。
欢乐的时光如此短暂,好了,今天就到这里了,觉得不错麻烦点个赞,danielwu的前端之路有你相伴,咱们下期再见!

浙公网安备 33010602011771号