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 相关文章推荐
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 Javascript
javascript检测是否联网的实现代码
Sep 28 Javascript
使用jquery动态加载js文件的方法
Dec 24 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
javascript实现将文件保存到本地方法汇总
Jul 26 Javascript
Javascript 5种方法实现过滤删除前后所有空格
Jun 22 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
Vue.js实现可排序的表格组件功能示例
Feb 19 Javascript
VSCode使用之Vue工程配置eslint
Apr 30 Javascript
layUI实现前端分页和后端分页
Jul 27 Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 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 什么是PEAR?(第二篇)
2009/03/19 PHP
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
PHP多例模式介绍
2013/06/24 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
PHP 断点续传实例详解
2017/11/11 PHP
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
python自动重试第三方包retrying模块的方法
2018/04/24 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
2019/08/22 Python
python实现随机加减法生成器
2020/02/24 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
Python 解析xml文件的示例
2020/09/29 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
18岁生日感言
2014/01/12 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS