Vuex——数据持久化

vuex-persistedstate

1.终端安装插件

npm install vuex-persistedstate --save

2.store文件引入

import Vue from 'vue'
import Vuex from 'vuex'
import app from './modules/app'
import user from './modules/user'
import tagsView from './modules/tagsView'
import permission from './modules/permission'
import settings from './modules/settings'
import getters from './getters'
import createPersistedState from 'vuex-persistedstate'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    app,
    user,
    tagsView,
    permission,
    settings
  },
  getters,
  // 仓库存储数据持久化
  plugins: [createPersistedState({
    storage: window.sessionStorage,
      reducer (val) {
        return {
          // 只储存state中的单条信息
          user: {
            avatar: val.user.avatar
          }
        }
      }
  })]
})

export default store

3. 不同格式

3.1 所有数据持久化
  plugins: [
    createPersistedState({
      storage: window.sessionStorage
    })
  ]
3.2 单条数据持久化

1) (非对象组合)
// 如果想要持久化的数据不是对象中的属性,且存在,且改变该数据

avatar: ""

// 如果想要持久化的数据不是对象中的属性,在原有store中不存在,则在vuex中新增一条持久化数据

plugins: [createPersistedState({
    storage: window.sessionStorage,
      reducer (val) {
        return {
          // 只储存state中的单条信息
          avatar: val.user.avatar
        }
      }
  })]

2) (对象组合)
// 原有store中已有对象user, 这样写会使原有数据持久化

user: {
	avatar: ''
}
  plugins: [createPersistedState({
    storage: window.sessionStorage,
      reducer (val) {
        return {
          // 只储存state中的单条信息
          user: {
            avatar: val.user.avatar
          }
        }
      }
  })]
4. 示例 (3.2 - 2)

原来这个属性一刷新就会置空,通过持久化保留该数据,刷新也不会被清空(我的示例属于3.2—2)对象组合)
在这里插入图片描述

### 关于Vuex持久化存储的实现方案 #### 插件的选择与安装 为了使Vuex状态能够跨会话持续存在,可以利用专门设计用于此目的的插件。`vuex-persistedstate`是一个广泛使用的选项[^3]。该工具允许开发者指定哪些部分的状态应该被保存至浏览器本地存储(如localStorage),从而确保即使是在页面刷新之后也能够恢复之前的应用状态。 对于项目的依赖管理,可以通过npm或yarn来完成`vuex-persistedstate`的安装: ```bash // 使用 npm 安装 npm install vuex-persistedstate --save // 或者使用 yarn 安装 yarn add vuex-persistedstate ``` #### 配置持久化功能 一旦选择了合适的插件并完成了必要的环境搭建工作,则需进一步配置Vuex store以便启用所选插件的功能。下面是一份基于`vuex-persistedstate`的具体实例,在这里仅对特定模块进行了持久化处理——即`lang`模块中的数据将会自动同步到用户的浏览器环境中去[^4]。 ```javascript import Vue from 'vue'; import Vuex from 'vuex'; import user from './modules/user'; import trade from './modules/Trade/index'; import lang from './modules/lang'; import createPersistedState from 'vuex-persistedstate'; Vue.use(Vuex); const persistedData = createPersistedState({ paths: ['lang'] }); export default new Vuex.Store({ modules: { user, trade, lang }, plugins: [persistedData] }); ``` 上述代码片段展示了如何创建一个新的Vuex Store实例,并通过plugins参数引入了由`createPersistedState()`函数返回的对象作为插件之一。这使得当store初始化时,任何存在于`paths`数组内的属性都会尝试从localStorage加载其初始值;而在每次mutation发生后也会相应更新这些路径下的最新状态回存入localStorage中。 #### 数据安全性和同步考虑 值得注意的是,在实施此类机制的过程中还需要关注几个方面的问题:一方面是要考虑到敏感信息不应轻易暴露给客户端长期保留的风险;另一方面则是要解决好不同设备间可能存在的冲突情况以及网络延迟带来的影响等问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值