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 相关文章推荐
jqgrid 简单学习笔记
May 03 Javascript
杨氏矩阵查找的JS代码
Mar 21 Javascript
Javascript排序算法之计数排序的实例
Apr 05 Javascript
ExtJs动态生成treepanel的Json格式
Jul 19 Javascript
js实现字符串和数组之间相互转换操作
Jan 12 Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
Apr 14 jQuery
vue.js学习之UI组件开发教程
Jul 03 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
ES6下子组件调用父组件的方法(推荐)
Feb 23 Javascript
vue项目每30秒刷新1次接口的实现方法
Dec 04 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的类 功能齐全的发送邮件类
2006/10/09 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP数组函数知识汇总
2016/05/12 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHP递归算法的简单实例
2019/02/28 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
python多线程http下载实现示例
2013/12/30 Python
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
详解Python爬虫的基本写法
2016/01/08 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
J2EE相关知识面试题
2013/08/26 面试题
《社戏》教学反思
2014/04/15 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
银行自荐信怎么写
2015/03/05 职场文书
机械生产实习心得体会
2016/01/22 职场文书
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
vue 自定义组件添加原生事件
2022/04/21 Vue.js
Vue Element plus使用方法梳理
2022/12/24 Vue.js