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

 更新时间:2024年08月31日 16:37:46   作者:一个好好的程序员  
这篇文章主要介绍了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.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
+    })
+  ]
})

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解mpvue小程序中怎么引入iconfont字体图标

    详解mpvue小程序中怎么引入iconfont字体图标

    这篇文章主要介绍了详解mpvue小程序中怎么引入iconfont字体图标,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Vue中mixins混入的介绍与使用详解

    Vue中mixins混入的介绍与使用详解

    如果我们在每个组件中去重复定义这些属性和方法会使得项目出现代码冗余并提高了维护难度,针对这种情况官方提供了Mixins特性,这时使用Vue mixins混入有很大好处,下面就介绍下Vue mixins混入使用方法,需要的朋友参考下吧
    2022-12-12
  • vue中v-model和响应式的实现原理解析

    vue中v-model和响应式的实现原理解析

    这篇文章主要介绍了vue中v-model和响应式的实现原理,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Vue中this.$nextTick()的理解与使用方法

    Vue中this.$nextTick()的理解与使用方法

    this.$nextTick是在下次dom更新循环之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的dom,下面这篇文章主要给大家介绍了关于Vue中this.$nextTick()的理解与使用的相关资料,需要的朋友可以参考下
    2022-02-02
  • 解决Vue页面固定滚动位置的处理办法

    解决Vue页面固定滚动位置的处理办法

    本篇文章主要介绍了解决Vue固定滚动位置的处理办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • vue实现标签云效果的示例

    vue实现标签云效果的示例

    这篇文章主要介绍了vue实现标签云效果的示例,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2020-11-11
  • vue 实现把路由单独分离出来

    vue 实现把路由单独分离出来

    这篇文章主要介绍了vue 实现把路由单独分离出来,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue中如何进行异步请求

    vue中如何进行异步请求

    前端的数据均是通过接口请求拿到的,而Vue本身不支持ajax请求,那么该怎么解决Vue中的异步请求呢?这儿提供了几种方法,希望对大家有所帮助
    2022-05-05
  • 一文秒懂vue-property-decorator

    一文秒懂vue-property-decorator

    这篇文章主要介绍了vue-property-decorator的简单知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • vue.js中for循环如何实现异步方法同步执行

    vue.js中for循环如何实现异步方法同步执行

    这篇文章主要介绍了vue.js中for循环如何实现异步方法同步执行问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论