Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题


Posted in Javascript onApril 16, 2019

页面刷新后,想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和localStorage中。但是用了vue后,vuex便可以被应用了。

vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到。

vuex劣势:在F5刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。

vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,这是我们不愿意看到的。怎么解决呢,我们可以结合本地存储做到数据持久化,也可以通过插件-vuex-persistedstate。

1.手动利用HTML5的本地存储

方法

  • vuex的state在localStorage或sessionStorage或其它存储方式中取值
  • 在mutations,定义的方法里对vuex的状态操作的同时对存储也做对应的操作。这样state就会和存储一起存在并且与vuex同步

问题

最直观的就是,手动写比较麻烦。

2.利用vuex-persistedstate插件

插件的原理其实也是结合了存储方式,只是统一的配置就不需要手动每次都写存储方法

使用方法

安装

npm install vuex-persistedstate --save

引入及配置

在store下的index.js中

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState()]
})

默认存储到localStorage

想要存储到sessionStorage,配置如下

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState({
  storage: window.sessionStorage
 })]
})

想使用cookie同理

默认持久化所有state

指定需要持久化的state,配置如下

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState({
  storage: window.sessionStorage,
  reducer(val) {
   return {
   // 只储存state中的assessmentData
   assessmentData: val.assessmentData
  }
  }
 })]

vuex引用多个插件的写法

譬如:vuex提示的插件和持久化的插件一起使用,配置如下

import createPersistedState from "vuex-persistedstate"
import createLogger from 'vuex/dist/logger'
// 判断环境 vuex提示生产环境中不使用
const debug = process.env.NODE_ENV !== 'production'
const createPersisted = createPersistedState({
 storage: window.sessionStorage
})
export default new Vuex.Store({
 // ...
 plugins: debug ? [createLogger(), createPersisted] : [createPersisted]
})

plugins要是一个一维数组不然会解析错误

API

createPersistedState([options])使用给定的选项创建插件的新实例。可以提供以下选项来配置您的特定需求的插件:

key <String>:存储持久状态的键。(默认:vuex)

paths <Array>:部分持续状态的任何路径的数组。如果没有路径给出,完整的状态是持久的。(默认:[])

reducer <Function>:一个函数,将被调用来减少基于给定的路径持久化的状态。默认包含这些值。

subscriber <Function>:一个被调用来设置突变订阅的函数。默认为store => handler => store.subscribe(handler)

storage <Object>:而不是(或与)getState和setState。默认为localStorage。

getState <Function>:将被调用以重新水化先前持久状态的函数。默认使用storage。

setState <Function>:将被调用来保持给定状态的函数。默认使用storage。

filter <Function>:将被调用来过滤将setState最终触发存储的任何突变的函数。默认为() => true

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
下载文件个别浏览器文件名乱码解决办法
Mar 19 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
Sep 22 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
Angular1.x复杂指令实例详解
Mar 01 Javascript
详解JavaScript调用栈、尾递归和手动优化
Jun 03 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
Vue.js获取被选择的option的value和text值方法
Aug 24 Javascript
Angular4.0动画操作实例详解
May 10 Javascript
微信小程序云开发之新手环境配置
May 16 Javascript
js页面加载后执行的几种方式小结
Jan 30 Javascript
AudioContext 实现音频可视化(web技术分享)
Feb 24 Javascript
详解滑动穿透(锁body)终极探索
Apr 16 #Javascript
一些手写JavaScript常用的函数汇总
Apr 16 #Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 #Javascript
理理Vue细节(推荐)
Apr 16 #Javascript
ES6知识点整理之Proxy的应用实例详解
Apr 16 #Javascript
js实现删除li标签一行内容
Apr 16 #Javascript
js实现弹出框的拖拽效果实例代码详解
Apr 16 #Javascript
You might like
php去除数组中重复数据
2014/11/18 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
php语法检查的方法总结
2019/01/21 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
Python实现全角半角转换的方法
2014/08/18 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
python3让print输出不换行的方法
2020/08/24 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
华为python面试题
2016/05/03 面试题
2015毕业寄语大全
2015/02/26 职场文书
计划生育工作总结2015
2015/04/03 职场文书
公司停电通知
2015/04/15 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL