Vuex数据持久化的两种方式:手动存储和vuex-persistedstate插件详解 |
第一部分:手动存储vuex的 store 中的数据是保存在运行内存中的,当页面刷新时,页面会重新加载 vue 实例,vuex里面的数据就会被重新赋值,这样就会出现页面刷新vuex中的数据丢失的问题 。 如何解决浏览器刷新数据丢失问题呢? 方法一:全局监听 页面刷新的时候将 store 里 state 的值存到 sessionStorage 中,然后从sessionStorage 中获取,再赋值给 store ,并移除 sessionStorage 中的数据 。 在 app.vue 中添加以下代码: //在根组件.vue中添加如下代码 app.vue
created () {
window.addEventListener('beforeunload', () => {
sessionStorage.setItem('list', JSON.stringify(this.$store.state))
})
try {
sessionStorage.getItem('list') && this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('list'))))
} catch (err) {
console.log(err)
}
sessionStorage.removeItem('list')
}第二部分:利用vuex-persistedstate插件vue2写法步骤: 第一步:运行如下的命令,安装持久化存储 vuex 中数据的第三方包: npm i vuex-persistedstate 第二步:在 默认存储到localStorage //vuex:store.js文件内容如下
import Vue from 'vue'
import Vuex from 'vuex'
// 1. 导入包
import createPersistedState from 'vuex-persistedstate'
Vue.use(Vuex)
export default new Vuex.Store({
// 2. 配置为 vuex 的插件
plugins: [createPersistedState()],
state: {
token: ''
...
},
})想要存储到sessionStorage,配置如下: import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
// ...
plugins: [createPersistedState({
storage: window.sessionStorage
})]
})vue3写法1)首先:我们需要安装一个vuex的插件 npm i vuex-persistedstate 2)然后:在
3)继续:在 import { createStore } from 'vuex'
import user from './modules/user'
import cart from './modules/cart'
import cart from './modules/category'
export default createStore({
modules: {
user,
cart,
category
}
})4)最后:使用vuex-persistedstate插件来进行持久化 import { createStore } from 'vuex'
+import createPersistedstate from 'vuex-persistedstate'
import user from './modules/user'
import cart from './modules/cart'
import cart from './modules/category'
export default createStore({
modules: {
user,
cart,
category
},
+ plugins: [
+ createPersistedstate({
+ key: 'erabbit-client-pc-store',
+ paths: ['user', 'cart'] //需要持久化的modules
+ })
+ ]
})总结以上为个人经验,希望能给大家一个参考,也希望大家多多支持 。 |