何为Vuex?用处是什么?为什么刷新丢失?

  1. Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 --官方回答
  2. 组件化开发作为前后端分离模式的一大特点但也伴随组件之间的通信的问题,当项目庞大、数据共享场景多、多层组件通信时,这时它就应该出现了,它为开发者提供简便的数据共享中心,不用再去纠结组件之间怎么传递数据了
  3. 刷新页面数据没了,咋那么怪异???作为共享数据管理,不应该是一直存在的么?刚开始时至少我是这样认为的!随着翻阅资料发现就应该是这结果,要是刷新页面数据不丢失就不正常了;因为我们JS的数据都是保存在浏览器的堆栈内存里面的,倘若刷新页面数据不丢失,那堆栈里的数据何时消失呢,项目一大全部数据都保留在浏览器堆栈,浏览器不炸不卡死科学么?有那么大内存的浏览器么?刷新浏览器页面,以前堆栈申请的内存被释放!这就是浏览器的运行机制。想通JS运行机制时,发现一些都能理解了。

页面刷新数据丢失既然是正常现象,那考虑的就应该是如何持久化数据了。

  1. 手动使用localStorage、sessionStorage就可以了;
  2. 既然用了Vuex那肯定就要用它相关的插件去实现嘛,这才说得过去,Vuex有2个插件去持久化数据:

我项目用的是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持久化数据的更多相关文章

  1. 解决vuex刷新页面数据丢失

    1.前言 vue构建的项目中,vuex的状态存储是响应式的,当vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会得到高效刷新,问题来了,vuex存储的数据只是在页 ...

  2. 24、vuex刷新页面数据丢失解决办法

    刷新页面时候将state数据保存到localStorage里面: export default { name: 'App', created () { //在页面加载时读取localStorage里的 ...

  3. 解决 Vue 刷新页面后 store 数据丢失的问题

    原来的状态(页面刷新数据会重置) state: { teamA: '主队' }, mutations: { data_teamA(state, x) { state.teamA = x } },   ...

  4. 解决vue刷新页面以后丢失store的数据

    刷新页面时vue实例重新加载,store就会被重置,可以把定义刷新前把store存入本地localStorage.sessionStorage.cookie中,localStorage是永久储存,重新 ...

  5. vue-router路由拦截基本设置,md5加密,js-cookie,vuex刷新页面store中的数据丢失等

    vuex持久化 vuex-persistedstate

  6. Vuex 刷新后数据丢失问题 Typescript

    问题描述:Vuex保存的数据在页面刷新后会全部丢失清除 问题解决方案:使用sessionstorage进行保存,在页面刷新时保存至sessionStorage,页面在加载时再进行填充   (另有vue ...

  7. 解决让刷新页面时不提示 "重试或取消”对话框

    如果刷新一个已经提交过的页面时,系统总是会提示一个 "重试或取消”的对话框.,如果是一个普通的页面,好象也无所谓,有就有,大不了多点一下.但是当我们是在子窗体中刷新父窗体时,就显得有点多余了 ...

  8. Ajax如何实现从前端不刷新页面就可以到后端取到数据

    提到axaj很多人总说很难,什么回调函数呀等等就让人心烦,其实懂得ajax在js里面是如何实现向服务器请求数据的原理,那么理解ajax也就不是很难了,现在我们一起来看看. ajax作用:ajax技术的 ...

  9. Android 完美解决bundle实现页面跳转并保留之前数据+传值

    1.前言 前言: 昨天碰到了一个问题,我想实现页面跳转,采用了Bundle之后,再回到原来的页面,发现数据也没有了, 而且一直报错,网上查找了很多资料,发现要用一个startActivityForRe ...

随机推荐

  1. [USACO19JAN]Shortcut题解

    本题算法:最短路树 这是个啥玩意呢,就是对于一个图,构造一棵树,使从源点开始的单源最短路径与原图一模一样.怎么做呢,跑一边Dijkstra,然后对于一个点u,枚举它的边,设当前的边为cur_edge, ...

  2. Numpy基础(数组创建,切片,通用函数)

    1.创建ndarray 数组的创建函数: array:将输入的数据(列表,元组,数组,或者其他序列类型)转换为ndarray.要么推断出dtype,要么显式给定dtype asarray:将输入转换为 ...

  3. VMware 15 搭建win 10 实操步骤+共享文件+激活操作

    写于:2018.12.22 一.简介: VMware 15 里搭建win 10是件很坑的事.我尝试了3种方法,最后才搭建成功.为了不让网友们不在走我走过的坑,特写了本文.   坑一:用老毛桃.大白菜搭 ...

  4. 手把手教你做echarts图表系列之组织结构图

    在实际项目中使用echarts越来越多了,今天从一个组织结构图开始,手把手教大家开发echarts图表. 公司里的组织结构图如下: 可以参考echarts入门教程:http://echarts.bai ...

  5. Linux驱动开发2——字符设备驱动

    1.申请设备号 #include <linux/fs.h> int register_chrdev_region(dev_t first, unsigned int count, char ...

  6. 使用xshell连接Ubuntu虚拟机

    1.下载安装VMware软件,可以试用. 2.新建虚拟机,选择典型安装,这里安装Ubuntu16.04 LTS,注意选择网络连接时设置为 桥接模式,在“编辑”--“虚拟网络编辑器”中将DHCP 池中的 ...

  7. Sqlserver 中间表的操作

    去除列名重复 select rtrim(ltrim(a.Bank)) as Country, count(*) as Total from T_BASE_OWNER a left join T_BAS ...

  8. PLSQL设置数据库选项

    1.将数据库安装目录下的"NETWORK"文件夹复制到client(客户端)安装目录下 : 2.修改"NETWORK"-->"ADMIN&quo ...

  9. 练习4-python+selenium+pandas

    最近对于python的第三方库pandas比较有兴趣,在学习的过程中也简单的结合selenium做了一个简单的小工具 最新公司用一个外部系统来记录,追踪BUG,可是这个系统并不是专业的BUG管理系统, ...

  10. github项目分享

    unity 项目合集:https://michidk.github.io/Unity-Script-Collection/ ugui特效:https://github.com/mob-sakai/UI ...