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因浏览器刷新数据消失,保持数据持久化问题?的更多相关文章

  1. 使用sessionStorage解决vuex在页面刷新后数据被清除的问题

    https://www.jb51.net/article/138218.htm 1.原因 2.解决方法 localStorage没有时间期限,除非将它移除,sessionStorage即会话,当浏览器 ...

  2. vue 使用localStorage解决vuex在页面刷新后数据被清除的问题

    通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...

  3. 【vue】使用localStorage解决vuex在页面刷新后数据被清除的问题

    通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...

  4. 解决vuex在页面刷新后数据丢失的问题

    一.原因 js代码是运行在内存中的,代码运行时的所有变量.函数也都是保存在内存中的. 刷新页面,以前申请的内存被释放,重新加载脚本代码,变量重新赋值,所以这些数据要想存储就必须存储在外部,例如:Loc ...

  5. 10.解决VUEX刷新的时候出现数据消失

    通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...

  6. 页面刷新vuex数据消失问题解决方案

    VBox持续进行中,哀家苦啊,有没有谁给个star. vuex是vue用于数据存储的,和redux充当同样的角色. 最近在VBox开发的时候遇到的问题,页面刷新或者关闭浏览器再次打开的时候数据归零.这 ...

  7. vue:vue页面刷新vuex数据消失问题

    vuex中数据刷新页面消失问题:a页面请求的数据保存在vuex中,只要不刷新,那跳转到b页面里也可以用,但如果b页面刷新,那vuex里的数据就会消失,可以得解决方法:a页面用的数据a页面的生命周期函数 ...

  8. 页面刷新vuex数据消失问题解决方案 之 vuex中间件

    之前我写了一篇用ES6 Proxy方案解决数据同步的文章 页面刷新vuex数据消失问题解决方案. 今天和同事沟通这个vuex数据还原问题,我说我的方法很奇异.聊着聊着,同事咋不用  store.sub ...

  9. 解决Vuex持久化插件-在F5刷新页面后数据不见的问题

    页面刷新后,想保存页面未保存的数据.我们总是习惯于放在浏览器的sessionStorage和localStorage中.但是用了vue后,vuex便可以被应用了. vuex优势:相比sessionSt ...

随机推荐

  1. Python【logging】模块

    # 1.负责往控制台里面输出日志信息的 # 2.往日志文件里面写日志的,按天生成日志,清理日志 import logging from logging import handlers logger = ...

  2. P1077 摆花

    P1077 摆花 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆.通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号.为了在门口展出更多种花, ...

  3. Redis总体 概述,安装,方法调用

    1 什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset( ...

  4. Interval GCD

    题目描述 给定一个长度为N的数列A,以及M条指令 (N≤5*10^5, M<=10^5),每条指令可能是以下两种之一:“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d ...

  5. SVN启停脚本

    说明:特别注意红色部分,外部$1传入Msg函数时失效,故特此读取一遍再传入!执行时要给脚本加执行权限!#chmod 755 /scripts/svn [root@kazihuo /scripts]# ...

  6. ETL测试

    今天让我在休息之余给我的测试朋友介绍一个在我的测试沙龙上的需要和提升技能之一,例如ETL测试(Extract,Transform,and Load,中文名称为数据提取.转换和加载),这篇文章告诉你ET ...

  7. ASP.NET对无序列表批量操作的三种方法

    在网页开发中,经常要用到无序列表.事实上在符合W3C标准的div+css布局中,无序列表被大量使用,ASP.NET虽然内置了BulletedList控件,用于创建和操作无序列表,但感觉不太好用.本篇介 ...

  8. 谁说码农不懂浪漫?(js写的'老婆生日快乐'特效)

    一直被老婆抱怨不懂浪漫,老婆的生日又来了,老婆指着闺蜜空间上贴的老公做的胡萝卜心形浪漫晚餐告诉我:必须送她一份用心的礼物.我绞尽脑汁想出这么一法子,还是得用我们码农的独特方式,经过一天多的努力,终于做 ...

  9. subtle:有趣的伪平铺式窗口管理器

    Author:吴吉庆 email: jiqingwu@gmail.com home:http://hi.baidu.com/jiqing0925 create:2011-02-19 update:20 ...

  10. 20155325 2016-2017-2 《Java程序设计》第6周学习总结

    教材学习内容总结 分类 输入流&输出流 字节流&字符流 节点流&处理流 核心方法 Input Stream int read(byte[]b,int off,int len) ...