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的插件来支持vuex的状态持久化。- npm i vuex-persistedstate
复制代码 2)然后:在文件夹下新建文件,在下新建和- src/store/modules/user.js
复制代码 3)继续:在中导入 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
- + })
- + ]
- })
复制代码 总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://www.jb51.net/javascript/326776imv.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2024-9-12 10:51:21
举报
回复
分享
|
|
|
|