何为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. asp.net实现大视频上传

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...

  2. POJ 3181 Dollar Dayz ( 完全背包 && 大数高精度 )

    题意 : 给出目标金额 N ,问你用面额 1~K 拼成 N 的方案有多少种 分析 : 完全背包的裸题,完全背包在 DP 的过程中实际就是列举不同的装填方案数来获取最值的 故状态转移方程为 dp[i] ...

  3. POJ 3061 Subsequence ( 二分 || 尺取法 )

    题意 : 找出给定序列长度最小的子序列,子序列的和要求满足大于或者等于 S,如果存在则输出最小长度.否则输出 0(序列的元素都是大于 0 小于10000) 分析 : 有关子序列和的问题,都可以考虑采用 ...

  4. UVALive 6862 Triples (找规律 暴力)

    Triples 题目链接: http://acm.hust.edu.cn/vjudge/contest/130303#problem/H Description http://7xjob4.com1. ...

  5. Python发送邮件(常见四种邮件内容)

    Python发送邮件(常见四种邮件内容) 转载 2017年03月03日 17:17:04   转自:http://lizhenliang.blog.51cto.com/7876557/1875330 ...

  6. React-Native 之 GD (七)下拉刷新 及 上拉加载更多

    1.下拉刷新  使用第三方插件 下载插件: $ npm install react-native-pull@latest --save 引入: import {PullList} from 'reac ...

  7. DSP处理器和ARM处理器的区别以及各自应用在那些领域

    由于工作经常接触到各种多核的处理器,如TI的达芬奇系列芯片拥有1个DSP核3个ARM核.那么DSP处理器和ARM处理器各自有什么区别,各自适合那些领域? DSP:digital signal proc ...

  8. atom超快替换文件中的tab到space

    找到开源的插件代码里缩进全部用的是tab,但公司内部的缩进要求是用space,所以需要将所有的tab替换成space. 在Atom编辑器里,选中所有内容后,点击 Edit - Lines - Auto ...

  9. tcp中的常见定时器

    (1)超时重传定时器tcp的靠谱特性,通过确认机制,保证每一个包都被对方收到,那么什么时候需要重传呢?就是靠这个超时重传定时器,每次发送报文前都启动这个定时器,如果定时器超时之前收到了应答则关闭定时器 ...

  10. 字符串中的TOUPPER函数

    std::string& str_toupper(std::string& s) { std::transform(s.begin(), s.end(), s.begin(), []( ...