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

第二步:在 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.js 和 cart.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
+    })
+  ]
})
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vuex持久化插件vuex-persistedstate是一个用于在Vue.js应用实现Vuex状态的持久化插件。它可以将Vuex的某些状态保存在本地存储,以便在页面刷新或重新加载后,仍然可以保持这些状态的值。 在使用vuex-persistedstate插件时,我们首先需要通过npm安装它,可以使用以下命令进行安装: npm install vuex-persistedstate --save 接下来,在我们的Vue应用,我们需要在Vuex的store文件引入vuex-persistedstate插件,并将其添加到Vuex的plugins选项。以一个具体的例子来说明,如果我们想要给tab模块的state的menu做持久化,我们可以使用如下代码配置我们的store: import Vue from 'vue' import Vuex from 'vuex' import tab from './tab.js' import createPersistedState from "vuex-persistedstate" Vue.use(Vuex) export default new Vuex.Store({ modules: { tab }, plugins: [ createPersistedState({ paths: ['tab.menu'] }) ] }) 在上述代码,我们引入了createPersistedState方法并将其作为插件传递给Vuex的plugins选项。通过传递一个对象给createPersistedState方法的paths选项,我们可以指定需要持久化的状态的路径。在这个例子,我们指定了tab模块下的menu状态需要进行持久化。 这样,当我们在应用对tab模块的menu状态进行修改后,这个修改将会被自动保存在本地存储。当我们刷新或重新加载页面时,这个状态的值将会被还原,以便我们可以继续使用之前保存的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vuex持久化存储插件vuex-persistedstate](https://blog.csdn.net/weixin_51382988/article/details/128584817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个好好的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值