使用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 组件注册
Nov 20 Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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+mysql一个名片库程序
2006/10/09 PHP
php分页示例代码
2007/03/19 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
python删除文件示例分享
2014/01/28 Python
详解Python中的strftime()方法的使用
2015/05/22 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
基于python时间处理方法(详解)
2017/08/14 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
Python实现注册、登录小程序功能
2018/09/21 Python
Django实现跨域请求过程详解
2019/07/25 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
数控技术应用个人求职信范文
2014/02/03 职场文书
初中成绩单评语
2014/12/29 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
Apache自带的ab压力测试工具的实现
2022/07/23 Servers