解决Vuex刷新页面数据丢失问题 ---- vuex-persistedstate持久化数据
何为Vuex?用处是什么?为什么刷新丢失?
- Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 --官方回答
- 组件化开发作为前后端分离模式的一大特点但也伴随组件之间的通信的问题,当项目庞大、数据共享场景多、多层组件通信时,这时它就应该出现了,它为开发者提供简便的数据共享中心,不用再去纠结组件之间怎么传递数据了
- 刷新页面数据没了,咋那么怪异???作为共享数据管理,不应该是一直存在的么?刚开始时至少我是这样认为的!随着翻阅资料发现就应该是这结果,要是刷新页面数据不丢失就不正常了;因为我们JS的数据都是保存在浏览器的堆栈内存里面的,倘若刷新页面数据不丢失,那堆栈里的数据何时消失呢,项目一大全部数据都保留在浏览器堆栈,浏览器不炸不卡死科学么?有那么大内存的浏览器么?刷新浏览器页面,以前堆栈申请的内存被释放!这就是浏览器的运行机制。想通JS运行机制时,发现一些都能理解了。
页面刷新数据丢失既然是正常现象,那考虑的就应该是如何持久化数据了。
- 手动使用localStorage、sessionStorage就可以了;
- 既然用了Vuex那肯定就要用它相关的插件去实现嘛,这才说得过去,Vuex有2个插件去持久化数据:
- vuex-persistedstate (接下来要讲的) 官链 https://www.npmjs.com/package/vuex-persistedstate
- vuex-persist
我项目用的是vuex-persistedstate 所以就来讲讲这插件的用法了
1.如何引入这里就不说了,详情看上面官方链接
2.在我们使用Vuex的地方index.js里引入 我这没有区分开 state 和 mutations 写在一个文件里
import Vue from 'vue'
import Vuex from 'vuex'
import actions from './actions'
import CreatePersistedState from 'vuex-persistedstate' Vue.use(Vuex) const state = {
// loading
showHttpLoading: false,
// 用户code
userCode: '',
// unionId
unionId: ''
} const mutations = {
// loading
UPDATE_SHOW_HTTP_LOADING (_state, val) {
_state.showHttpLoading = val
},
// 保存 code
SAVE_USER_CODE (_state, val) {
_state.userCode = val
},
// 保存 unionId
SAVE_USER_UNIONID (_state, val) {
_state.unionId = val
}
} // vuex-persistedstate默认持久化所有state 若不需要全部则把需要持久化的数据放到reducer里 比如 showHttpLoading、unionId 需要持久化 userCode不需要则不需要加入
const vuexPersisted = new CreatePersistedState({
key: 'VuexPersisted',
storage: window.sessionStorage, # // 可选择 localStorage、sessionStorage、cookie 看需求
reducer: state => ({
// loading
showHttpLoading: state.showHttpLoading,
// unionId
unionId: state.unionId,
})
}) // 向外暴露store对象
export default new Vuex.Store({
state,
mutations,
actions,
plugins: [vuexPersisted]
})
如果此刻想配置多个选项,将plugins写成一个一维数组,不然会报错
import CreatePersistedState from 'vuex-persistedstate'
import createLogger from 'vuex/dist/logger'
export default new Vuex.Store({
state,
mutations,
actions,
plugins: [createLogger(), createPersisted]
})
结语: 用问题、或有不对之处环欢迎留言
解决Vuex刷新页面数据丢失问题 ---- vuex-persistedstate持久化数据的更多相关文章
- 解决vuex刷新页面数据丢失
1.前言 vue构建的项目中,vuex的状态存储是响应式的,当vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会得到高效刷新,问题来了,vuex存储的数据只是在页 ...
- 24、vuex刷新页面数据丢失解决办法
刷新页面时候将state数据保存到localStorage里面: export default { name: 'App', created () { //在页面加载时读取localStorage里的 ...
- 解决 Vue 刷新页面后 store 数据丢失的问题
原来的状态(页面刷新数据会重置) state: { teamA: '主队' }, mutations: { data_teamA(state, x) { state.teamA = x } }, ...
- 解决vue刷新页面以后丢失store的数据
刷新页面时vue实例重新加载,store就会被重置,可以把定义刷新前把store存入本地localStorage.sessionStorage.cookie中,localStorage是永久储存,重新 ...
- vue-router路由拦截基本设置,md5加密,js-cookie,vuex刷新页面store中的数据丢失等
vuex持久化 vuex-persistedstate
- Vuex 刷新后数据丢失问题 Typescript
问题描述:Vuex保存的数据在页面刷新后会全部丢失清除 问题解决方案:使用sessionstorage进行保存,在页面刷新时保存至sessionStorage,页面在加载时再进行填充 (另有vue ...
- 解决让刷新页面时不提示 "重试或取消”对话框
如果刷新一个已经提交过的页面时,系统总是会提示一个 "重试或取消”的对话框.,如果是一个普通的页面,好象也无所谓,有就有,大不了多点一下.但是当我们是在子窗体中刷新父窗体时,就显得有点多余了 ...
- Ajax如何实现从前端不刷新页面就可以到后端取到数据
提到axaj很多人总说很难,什么回调函数呀等等就让人心烦,其实懂得ajax在js里面是如何实现向服务器请求数据的原理,那么理解ajax也就不是很难了,现在我们一起来看看. ajax作用:ajax技术的 ...
- Android 完美解决bundle实现页面跳转并保留之前数据+传值
1.前言 前言: 昨天碰到了一个问题,我想实现页面跳转,采用了Bundle之后,再回到原来的页面,发现数据也没有了, 而且一直报错,网上查找了很多资料,发现要用一个startActivityForRe ...
随机推荐
- POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )
题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...
- NOI 2727:仙岛求药 x
总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发 ...
- 题解 P1433 【吃奶酪】
这道题是一道著名的NP问题. 正解应该是DP,但我在这里讲一种近似算法--爬山. 希望某些dalao注意一下爬山与模拟退火的区别. 爬山是直往低处往高处爬,每次取大的,也就是一种贪心思想. 而模拟退火 ...
- matplotlib中中文字体配置
解决方式1:利用matplotlib的字体管理工具font_manager---->缺点:每次必须要进行设置 import matplotlib.pyplot as plt from matpl ...
- CSS的一些单位,如rem、px、em、vw、vh、vm
总结了一下一些单位的不同 px:像素(pixel)相对长度单位,,是相对于屏幕显示器分辨率而言的: em:em的值并不是固定的,会集成父级元素的字体大小: 注意: 1.body选择其中声明Font-s ...
- 【翻译】详解HTML5 自定义 Data 属性
原标题:HTML5 Custom Data Attributes (data-*) 你是否曾经使用 class 或 rel 来保存任意的元数据,只为了使你的JavaScript更简单?如果你回答是的, ...
- 大数据笔记(三)——Hadoop2.0的安装与配置
一.Hadoop安装部署的预备条件 准备:1.安装Linux和JDK. 安装JDK 解压:tar -zxvf jdk-8u144-linux-x64.tar.gz -C ~/training/ 设置环 ...
- 2.Vue子组件给父组件通信
子组件给父组件通信 如果子组件想要改变数据呢?这在vue中是不允许的,因为vue只允许单向数据传递,这时候我们可以通过触发事件来通知父组件改变数据,从而达到改变子组件数据的目的 子组件: <te ...
- ARM非对齐访问和Alignment Fault
1.指令对齐 A64指令必须word对齐.尝试在非对齐地址取值会触发PC alignment fault. 1.1.PC alignment checking PC(Program Counter)寄 ...
- LinkedHashMap 源码分析
LinkedHashMap LinkedHashMap 能解决什么问题?什么时候使用 LinkedHashMap? 1)LinkedHashMap 按照键值对的插入顺序进行遍历,LinkedHashM ...