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 相关文章推荐
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
Aug 02 Javascript
使用GruntJS构建Web程序之合并压缩篇
Jun 06 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
Sep 28 Javascript
跟我学习javascript的var预解析与函数声明提升
Nov 16 Javascript
JS数组排序方法实例分析
Dec 16 Javascript
Vue.js实现文章评论和回复评论功能
May 30 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
Sep 27 Javascript
微信小程序实现日历效果
Dec 28 Javascript
vue.js仿hover效果的实现方法示例
Jan 28 Javascript
Vue基础配置讲解
Nov 29 Javascript
JS数组方法join()用法实例分析
Jan 18 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
牡丹941资料
2021/03/01 无线电
一个简洁的多级别论坛
2006/10/09 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
原料仓管员岗位职责
2014/04/12 职场文书
初三学习计划书范文
2014/04/30 职场文书
施工安全责任书范本
2014/07/24 职场文书
2014年个人委托书范本
2014/10/13 职场文书
父亲去世追悼词
2015/06/23 职场文书
劳动模范获奖感言
2015/07/31 职场文书
高中化学教学反思
2016/02/22 职场文书
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python