vuex、pinia数据持久化

379 阅读1分钟

vuex可以进行全局的状态管理,但刷新后状态会重置。

vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到。 vuex劣势:刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。

vuex-persistedstate插件

vue-persistedstate - npm (npmjs.com)

安装

npm install vuex-persistedstate --save

1.使用vuex-persistedstate默认存储到localStorage

// store/index.js
import { createStore } from 'vuex
import createVuexPersistedState  from "vuex-persistedstate"
import user from './modules/user'
const store = createStore({
    modules: {
        user
    },
    plugins:[createVuexPersistedState({
        key: '自定义key',
        storage:window.localStorage,// 存储缓存方式
        whiteList:[], // 白名单:为空或不设置为全部缓存,默认为全部缓存,白名单可设置为缓存其他键不缓存
        blackList: [],
        paths: []// 存储state中的那些数据,如果是模块下具体的数据需要加上模块名称,如`user.token`
    })]
})
export default store 

vuex-persist - npm (npmjs.com)

pinia数据持久化

安装

npm i pinia-plugin-persist

1.pinia-plugin-persistedstate

// main.js
import { createApp } from 'vue'
import './style.css'
import store from './store'
import App from './App.vue'
import router from './router'

const app = createApp(App)
app.use(store).use(router).mount('#app')

// store/index.js
import { createPinia } from 'pinia'
// 引入pinia持久化插件
import piniaPluginPersist from 'pinia-plugin-persist'

const store = createPinia()
store.use(piniaPluginPersist)
export default store
// store/user.js
import { defineStore } from 'pinia'
export const user = defineStore('user', {
    state: () => {
        return {
            num: 0,
            name: '张三'
        }
    },
    getters: {
        changeNum() {
            return this.num + 1000
        }
    },
    actions: {
        upNum(val) {
            this.num += val
        }
    },
    persist: {
        // 开启持久化
        enabled: true,
        strategies: [
            { 
                storage: localStorage, // 指定存储方式
                key: "localStorage",
                paths: ['name']
            }
        ]
    }
})