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 相关文章推荐
初窥JQuery-Jquery简介 入门了解篇
Nov 25 Javascript
jquery zTree异步加载简单实例分享
Feb 05 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
jQuery表单美化插件jqTransform使用详解
Apr 12 Javascript
js实现的后台左侧管理菜单代码
Sep 11 Javascript
JS实现网页上随机产生超链接地址的方法
Nov 09 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
详解webpack2+React 实例demo
Sep 11 Javascript
jQuery自动或手动图片切换效果
Oct 11 jQuery
实例分析JS与Node.js中的事件循环
Dec 12 Javascript
原生JS使用Canvas实现拖拽式绘图功能
Jun 05 Javascript
基于Layui自定义模块的使用方法详解
Sep 14 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获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
TensorFlow如何实现反向传播
2018/02/06 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python实现简易内存监控
2018/06/21 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
Django时区详解
2019/07/24 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
环保守法证明
2015/06/24 职场文书
中学总务处工作总结
2015/08/12 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript