如何解决vuex因浏览器刷新数据消失,保持数据持久化问题?
vuex的一个全局状态管理的插件,但是在浏览器刷新的时候,内存中的state会释放。通常的解决办法就是用本地存储的方式保存数据,然后再vuex初始化的时候再赋值给state,此过程有点麻烦。因此可以使用插件vuex-solidification来解决。
<1>插件地址:
https://www.npmjs.com/package/vuex-persistedstate
<2>插件原理:
vuex有一个hook方法:store.subscribe((mutation, state) => {})
每次在mutation方法执行完之后都会调用这个回调函数,返回执行完毕之后的state
<3>使用方法
安装:npm install --save vuex-persistedstate
使用: import Vue from 'vue' import Vuex from 'vuex' //引入插件 import createPersistedState from 'vuex-persistedstate' Vue.use(Vuex); const store = new Vuex.Store({ .... plugins: [ // 默认存储所有state数据到localstorage //加上这个就可以了 createPersistedState() ] })
<4>插件说明
createPersistedState([options])
key: String
存储到localStorage, sessionStorage 中对象的key,默认为vuex
local: Object 和 session: Object
1.分别代表localStorage的配置和sessionStorage的配置
2.local 和 session 里面可以有: include: Array 和 exclude: Array
例子:
假设vuex中state为:
state:{
count:{
value:0,
name:"tom"
},
id:1
} (1)local:{ include:[] }
//设置localstorage里面存储的state createPersistedState({
local: {
include: ['count.value']
}
}) /*
hook钩子触发之后,localstorage里面存储的对象为:
{
count: {
value: 0,
}
}
*/ (2)local:{ exclude:[] }
//设置除了exclude之外 localstorage里面存储的state createPersistedState({
local: {
//除了count.value,其他state数据都存储
exclude: ['count.value']
}
}) /*
hook钩子触发之后,localstorage里面存储的对象为:
{
count: {
name:"tom"
},
id:1
}
*/ (3)session:{ include:[] }
//设置sessionstorage里面存储的state createPersistedState({
session: {
include: ['count.value']
}
}) /*
hook钩子触发之后,sessionstorage里面存储的对象为:
{
count: {
value: 0,
}
}
*/ (4)session:{ exclude:[] }
//设置除了exclude之外 sessionstorage里面存储的state createPersistedState({
session: {
exclude: ['count.value']
}
})
/*
hook钩子触发之后,sessionstorage里面存储的对象为:
{
count: {
name:"tom"
},
id:1
}
*/ (5)同时设置local和session
createPersistedState({
local: {
include: ['id']
},
session: {
include: ['count']
}
}) /*
hook钩子触发之后,
localstorage里面存储的对象为:
{
id:1
} sessionstorage里面存储的对象为:
{
count:{
value:0,
name:"tom"
}
}
*/
<5>自定义存储
如果在本地存储中存储Vuex存储的状态并不理想。人们可以轻松地实现功能使用cookie(或任何其他你可以想到的);
import { Store } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import * as Cookies from 'js-cookie' const store = new Store({
// ...
plugins: [
createPersistedState({
storage: {
getItem: key => Cookies.get(key),
setItem: (key, value) => Cookies.set(key, value, { expires: 3, secure: true }),
removeItem: key => Cookies.remove(key)
}
})
]
})
实际上,可以传递任何遵循存储协议(getItem,setItem,removeItem等)的对象:
createPersistedState({ storage: window.sessionStorage })
其他介绍见官网
如何解决vuex因浏览器刷新数据消失,保持数据持久化问题?的更多相关文章
- 使用sessionStorage解决vuex在页面刷新后数据被清除的问题
https://www.jb51.net/article/138218.htm 1.原因 2.解决方法 localStorage没有时间期限,除非将它移除,sessionStorage即会话,当浏览器 ...
- vue 使用localStorage解决vuex在页面刷新后数据被清除的问题
通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...
- 【vue】使用localStorage解决vuex在页面刷新后数据被清除的问题
通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...
- 解决vuex在页面刷新后数据丢失的问题
一.原因 js代码是运行在内存中的,代码运行时的所有变量.函数也都是保存在内存中的. 刷新页面,以前申请的内存被释放,重新加载脚本代码,变量重新赋值,所以这些数据要想存储就必须存储在外部,例如:Loc ...
- 10.解决VUEX刷新的时候出现数据消失
通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...
- 页面刷新vuex数据消失问题解决方案
VBox持续进行中,哀家苦啊,有没有谁给个star. vuex是vue用于数据存储的,和redux充当同样的角色. 最近在VBox开发的时候遇到的问题,页面刷新或者关闭浏览器再次打开的时候数据归零.这 ...
- vue:vue页面刷新vuex数据消失问题
vuex中数据刷新页面消失问题:a页面请求的数据保存在vuex中,只要不刷新,那跳转到b页面里也可以用,但如果b页面刷新,那vuex里的数据就会消失,可以得解决方法:a页面用的数据a页面的生命周期函数 ...
- 页面刷新vuex数据消失问题解决方案 之 vuex中间件
之前我写了一篇用ES6 Proxy方案解决数据同步的文章 页面刷新vuex数据消失问题解决方案. 今天和同事沟通这个vuex数据还原问题,我说我的方法很奇异.聊着聊着,同事咋不用 store.sub ...
- 解决Vuex持久化插件-在F5刷新页面后数据不见的问题
页面刷新后,想保存页面未保存的数据.我们总是习惯于放在浏览器的sessionStorage和localStorage中.但是用了vue后,vuex便可以被应用了. vuex优势:相比sessionSt ...
随机推荐
- 特征选择实践---python
作者:城东链接:https://www.zhihu.com/question/28641663/answer/110165221来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- HOJ 13101 The Triangle Division of the Convex Polygon(数论求卡特兰数(模不为素数))
The Triangle Division of the Convex Polygon 题意:求 n 凸多边形可以有多少种方法分解成不相交的三角形,最后值模 m. 思路:卡特兰数的例子,只是模 m 让 ...
- OneProxy实现mysql读写分离
OneProxy for MySQL可以复用不同应用到后端数据库的连接,有效降低数据库的并发连接数:可以即时踢除不可用的节点,将应用请求转发到其他可用节点,保证业务服务的稳定性. 可透明地将查询语句分 ...
- 学习Oracle的一些收获
前言: 在看尚硅谷的Oracle视频时,总结的一些自己之前不熟的,或者完全不了解的知识点,只适用于本人,本人有一定的SQL基础,所以一些我比较熟悉的知识点不会列出来. Oracle中SQL使用技巧: ...
- NLP分词
英文分词: #英文分词 import nltk sentence="hello,world" tokens=nltk.word_tokenize(sentence) print(t ...
- MacOS Sierra允许运行任何来源的程序
参考自http://bbs.feng.com/read-htm-tid-10584598.html Mac新系统 Sierra中默认已经看不到“任何来源”的选项,就无法安装很多的第三方程序,所以需要做 ...
- Java入门系列(一)基础概览
序言 Java语言的特点不使用指针而使用引用.
- 悲催的IE6 七宗罪大吐槽(带解决方法)第一部分
一.奇数宽高 悲剧的IE6啊,为何有如此多bug,但用户市场又那么大,真让我们搞网站的纠结.今天就遇到了一个非常奇怪但又很细节的一个bug,一个外部的相对定位div,内部一个绝对定位的div(righ ...
- element-UI 表单图片判空验证问题
本文地址:http://www.cnblogs.com/veinyin/p/8567167.html element-UI的表单验证似乎并没有覆盖到文件上传上面,当我们需要在表单里验证图片时,就会出 ...
- python 爬虫 ~ 查看收发包的情况
DebugLog 可以用来查看收发包的情况,比较有意思,现特意记录下来: Sample: import urllib2 httpHandler = urllib2.HTTPHandler(debugl ...