使用vuex-persistedstate本地存储vuex


Posted in Vue.js onApril 29, 2022

vuex-persistedstate将vuex本地存储

使用场景

最近在做Vue项目中的登录模块,登陆成功后获取到token,将token存储在vuex中,然而我发现切换路由后vuex中的数据都恢复默认了,原来页面刷新之后vuex的数据都会恢复默认。而后面进行鉴权处理需要token,于是我们要将vuex中的数据进行本地存储。

这里就用到了vuex持久化插件vuex-persistedstate

Vuex-persistedstate

这个插件的原理结合了存储方式,只是统一配置后就不需要手动写存储方法了

使用方法:

安装

npm install vuex-persistedstate --save

在store下的index.js中引入配置

import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
export default createStore({  
    state: {  },  
    mutations: {  },  
    actions: {  },  
    modules: {  },  
    plugins: [    
        createPersistedState(),  
    ],
})

这样是默认存储到localStorage,如果想要存储到sessionStorage,配置如下

import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
export default createStore({  
    state: {  },  
    mutations: {  },  
    actions: {  },  
    modules: {  },  
    plugins: [    
        // 把vuex的数据存储到sessionStorage    
        createPersistedState({      
            storage: window.sessionStorage,    
        }),  
    ],
})

默认持久化所有的state,如果想要存储指定的state,配置如下

import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
export default createStore({  
    state: {  },  
    mutations: {  },  
    actions: {  },  
    modules: {  },  
    plugins: [    
        // 把vuex的数据存储到sessionStorage    
        createPersistedState({      
            storage: window.sessionStorage,      
            reducer(val) {        
                return {          
                    // 只存储state中的userData          
                    userData: val.userData        
                }      
            }    
        }),  
    ],
})

API

  • key:存储持久状态的key(默认vuex)
  • paths:部分持续状态的任何路径的数组。如果没有路径给出,完整的状态是持久的。(默认:[])
  • reducer:一个函数,将被调用来基于给定的路径持久化的状态。默认包含这些值。
  • subscriber:一个被调用来设置突变订阅的函数。默认为store => handler => store.subscribe(handler)
  • storage:而不是(或与)getState和setState。默认为localStorage。
  • getState:将被调用以重新水化先前持久状态的函数。默认使用storage。
  • setState:将被调用来保持给定状态的函数。默认使用storage。
  • filter:将被调用来过滤将setState最终触发存储的任何突变的函数。默认为() => true

vuex的本地存储

vuex是什么

Vuex是一个专为 Vue.js 应用程序开发的状态管理模式

vuex就是一个仓库 众所周知就是存放公共数据的一个地方 任何组件内的都可以使用vuex中的数据

vuex中的五大核心

  • State

存放Vuex store实例的状态对象,用于定义共享的数据, 以及设定的变量

  • Action

向store发出调用通知,去执行异步操作

  • Mutations

它只用于修改state中定义的状态变量 , 相当于vue当中methods 来进行逻辑的代码操作

  • Modules

对state进行分类处理,相当于模块

  • getters

外部程序通过它获取变量的具体值,或者在取值前做一些计算(可以认为是store的计算属性)

  • plugins

这个是数组展示 而不是以对象形式展示 ,数组当中是对象的形式 数组当中存放vuex的本地存储

  • vuex-persist

是vuex是一个插件 数据的缓存, 跟localStorage是一个本质的意思,将数据存储在用户的本地,当然这个插件的特性只能在vuex当中使用,在vue中就使用不了

那么 vuex-persist 如何使用

在终端当中下载

cnpm install vuex-persist -save

下载完成后 还需要在vuex当中引入

import vuexPersist from 'vuex-persist';

引入之后需要在 export default 当中 实例化出

plugins:[
    new vuexPersist({
        localstorage:window.localStorage,
    }).plugin,
],

new 一个对象出 对象中写入 localStorage

new 出的对象需要跟引入的 名字相同

当然vuex的本地存储还有一种方式

以上方式相对来说复杂

在终端当中直接下载

cnpm install vuex-persistedstate -save

在plugins 中直接调用即可 这种方法先对简单 不需要再去new一下

plugins: [
Persist()
]

Tags in this post...

Vue.js 相关文章推荐
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
vue中defineProperty和Proxy的区别详解
Nov 30 Vue.js
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
vue 组件基础知识总结
Jan 26 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
详解Vue3使用axios的配置教程
Apr 29 #Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 #Vue.js
vue里使用create, mounted调用方法
vue elementUI批量上传文件
Apr 26 #Vue.js
vue.js 使用原生js实现轮播图
Apr 26 #Vue.js
如何vue使用el-table遍历循环表头和表体数据
vue 把二维或多维数组转一维数组
Apr 24 #Vue.js
You might like
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
MSN消息提示类
2006/09/05 Javascript
js身份证验证超强脚本
2008/10/26 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
Python内建模块struct实例详解
2018/02/02 Python
python创造虚拟环境方法总结
2019/03/04 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
学生会主席事迹材料
2014/01/28 职场文书
小学生家长评语大全
2014/02/10 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
中考标语大全
2014/06/05 职场文书
授权收款委托书
2014/09/23 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
国王的演讲观后感
2015/06/03 职场文书
小学大队长竞选稿
2015/11/20 职场文书
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫