当前位置: 代码网 > it编程>编程语言>Javascript > Vuex数据持久化的两种方式:手动存储和vuex-persistedstate插件详解

Vuex数据持久化的两种方式:手动存储和vuex-persistedstate插件详解

2024年09月07日 Javascript 我要评论
第一部分:手动存储vuex的 store 中的数据是保存在运行内存中的,当页面刷新时,页面会重新加载 vue 实例,vuex里面的数据就会被重新赋值,这样就会出现页面刷新vuex中的数据丢失的问题。如

第一部分:手动存储

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

第二步:在 src/store/index.js 模块中,导入并配置 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的插件vuex-persistedstate来支持vuex的状态持久化。

npm i vuex-persistedstate

2)然后:在src/store 文件夹下新建 modules 文件,在 modules 下新建 user.jscart.js

src/store/modules/user.js

3)继续:在 src/store/index.js 中导入 user cart 模块。

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
+    })
+  ]
})

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com