何为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. 完美解决linux不能编辑sshd_cofig和实现xshell远程连接的问题

    第一步:我们使用命令行vim /etc/ssh/sshd_config   执行修改,强制保持  :wq!  系统不让我们修改这个文件 "/etc/ssh/sshd_config" ...

  2. word的公式编辑器在插入对象里面!!!!!!!!!!!!!

    word的公式编辑器在  插入->对象  里面!!!!!!!!!!!!!

  3. Ajax中浏览器的缓存问题解决方法

    我们在做项目中,一般提交请求都会通过ajax来提交,但是测试的时候发现,每次提交后得到的数据都是一样的,调试可以排除后台代码的问题,所以问题肯定是出在前台 每次清除缓存后,就会得到一个新的数据,所以归 ...

  4. POJ 3280 Cheapest Palindrome ( 区间DP && 经典模型 )

    题意 : 给出一个由 n 中字母组成的长度为 m 的串,给出 n 种字母添加和删除花费的代价,求让给出的串变成回文串的代价. 分析 :  原始模型 ==> 题意和本题差不多,有添和删但是并无代价 ...

  5. Ubuntu安装过程中的问题

    1.win10系统安装32bit ubuntu,使用VM安装ubuntu 的iso文件,刚启动不停按F2,进入BIOS,boot设置为 CD-ROM drive 2.安装界面都没有出现,电脑老是重启, ...

  6. Miniprofiler在目中使用报 mini-profiler-resources/includes.js 404错误

    原因,没有配置webconfig <system.webServer> <modules> <remove name="FormsAuthentication& ...

  7. HDU 6438 Buy and Resell

    高卖低买,可以交易多次 维护一个优先队列,贪心 相当于每天卖出 用当前元素减优先队列最小得到收益 用0/卖出,1/买入标志是否真实进行了交易,记录次数 #include<bits/stdc++. ...

  8. SpringMVC开发手册

    title: SpringMvc -- 开发手册 date: 2018-11-15 22:14:22 tags: SpringMvc categories: SpringMvc #分类名 type: ...

  9. CSS中clip-path属性的使用

    clip-path的使用 polygon 值为多个坐标点组成,坐标第一个值是x方向,第二个值是y方向. 左上角为原点,右下角是(100%,100%)的点.</p> body { backg ...

  10. Linux下修改mysql root密码

    1.修改MySQL的配置文件(默认为/etc/my.cnf),在[mysqld]下添加一行skip-grant-tables 2.保存配置文件后,重启MySQL服务 service mysqld re ...