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 相关文章推荐
百度留言本js 大家可以参考下
Oct 13 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
Jan 17 Javascript
Javascript 是你的高阶函数(高级应用)
Jun 15 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
Jun 07 Javascript
基于jQuery实现火焰灯效果导航菜单
Jan 04 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
全面总结Javascript对数组对象的各种操作
Jan 22 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
May 08 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
jQuery实现广告条滚动效果
Aug 22 jQuery
angularjs请求数据的方法示例
Aug 06 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 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设计模式编程中的简单工厂模式
2016/02/29 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
用Python的urllib库提交WEB表单
2009/02/24 Python
Python max内置函数详细介绍
2016/11/17 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
中科软测试工程师面试题
2012/06/16 面试题
初婚初育证明
2014/01/14 职场文书
大学运动会入场词
2014/02/22 职场文书
社会实践活动总结范文
2014/07/03 职场文书
重阳节慰问信
2015/02/15 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏