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 相关文章推荐
关于event.cancelBubble和event.stopPropagation()的区别介绍
Dec 11 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
js数字计算 误差问题的快速解决方法
Feb 28 Javascript
javascript中的replace函数(带注释demo)
Jan 07 Javascript
详解Vue 多级组件透传新方法provide/inject
May 09 Javascript
深入了解javascript 数组的sort方法
Jun 01 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 28 Javascript
js实现随机点名
Jan 19 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
Vue router配置与使用分析讲解
Dec 24 Vue.js
详解滑动穿透(锁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实现MVC开发得最简单的方法――模型
2007/04/10 PHP
PHP自定义函数收代码
2010/08/01 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
js实现电灯开关效果
2021/01/19 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python基本数据类型详细介绍
2014/03/11 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
艺人经纪人岗位职责
2014/04/15 职场文书
施工安全汇报材料
2014/08/17 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
中秋联欢会主持词
2015/07/04 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers