vuex页面刷新后数据丢失的方法


Posted in Javascript onJanuary 17, 2019

1. 原因

(1)js代码是运行在内存中的,代码运行时的所有变量、函数都是保存在内存中。
(2)刷新页面,以前申请的内存被释放,重新加载脚本代码,变量要重新赋值。
(3)要想刷新后数据不丢失就必须把数据存储在外部,例如:Local Storage、Session Storage、Index DB等。这些都是浏览器提供的API,让你可以将数据存储在硬盘上,做持久化存储。

2. HTML5提供的2种客户端存储数据的新方法

localStorage存储数据:

(1)存储的数据是永久性的,永不过期;
(2)作用域是限定在文档源级别的。同源的文档间共享同样的localStorage数据(不论该源的脚本是否真正的访问localStorage)。
他们可以互相读取对方的数据,甚至可以覆盖对方的数据。但是,非同源的文档间互相都不能读取或者覆盖对方的数据。(即使他们运行的脚本是来自同一台第三方的服务器也不行)。

sessionStorage存储数据:

(1)会话,当浏览器关闭时会话结束并清除数据,有时间期限;
(2)存储数据的有效期和存储数据的脚本所在的最顶层的窗口或者是浏览器标签页是一样的,一旦窗口或者标签页被永久关闭了,

那么所有通过sessionStorage存储的数据也都被删除了。

3.具体实现(登入后保存状态,退出后移除状态)

// vuex mutations
const mutations = {
  setToken(state, token) {
    // 保存用户认证Token
    sessionStorage.setItem('token', token);
    state.token = token;
  },
  setUser(state, user) {
    // 保存用户信息
    sessionStorage.setItem('user', JSON.stringify(user));
    state.user = user;
  },
  // 注销登录,清除token
  logout(state) {
    state.token = null;
    state.user = null;
    sessionStorage.removeItem('token');
    sessionStorage.removeItem('user');
  }
};

// vuex getters
const getters = {
  getToken(state){
    if(state.token === null){
      state.token = sessionStorage.getItem('token')
    }
    return state.token;
  },
  // 获取当前用户登录信息
  getUser(state) {
    if(state.user === null) {
      state.user = JSON.parse(sessionStorage.getItem('user'));
    }
    return state.user;
  }
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
传智播客学习之java 反射
Nov 22 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
Javascript的各种节点操作实例演示代码
Jun 27 Javascript
javascript模拟实现ajax加载框实例
Oct 15 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
全面解析Bootstrap表单使用方法(表单样式)
Nov 24 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
Dec 06 Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
HTML元素拖拽功能实现的完整实例
Dec 04 Javascript
jquery获取img的src值实例介绍
Jan 16 #jQuery
js中int和string数据类型互相转化实例
Jan 16 #Javascript
JavaScript设计模式之观察者模式实例详解
Jan 16 #Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 #Javascript
js删除数组中某几项的方法总结
Jan 16 #Javascript
JavaScript设计模式之责任链模式实例分析
Jan 16 #Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 #Javascript
You might like
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python中优化NumPy包使用性能的教程
2015/04/23 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
详解Python用户登录接口的方法
2019/04/17 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
英语教育专业毕业生求职信
2014/08/28 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
2015年母亲节寄语
2015/03/23 职场文书
面试通知短信
2015/04/20 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python