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 相关文章推荐
爱恋千雪-US-AscII加密解密工具(网页加密)下载
Jun 06 Javascript
使用js获取QueryString的方法小结
Feb 28 Javascript
IE无法设置短域名下Cookie
Sep 23 Javascript
JS中判断JSON数据是否存在某字段的方法
Mar 07 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
JavaScript的null和undefined区别示例介绍
Sep 15 Javascript
jQuery垂直多级导航菜单代码分享
Aug 18 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
基于javascript数组实现图片轮播
May 02 Javascript
BootStrap轮播HTML代码(推荐)
Dec 10 Javascript
Vue2.0 slot分发内容与props验证的方法
Dec 12 Javascript
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 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函数指定默认值方法的小例子
2013/12/04 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
PHP微信支付开发实例
2016/06/22 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
js css自定义分页效果
2017/02/24 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
如何让python的运行速度得到提升
2020/07/08 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
学习党课思想汇报
2013/12/29 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
办公室禁烟通知
2015/04/23 职场文书
音乐课外活动总结
2015/05/09 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers