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 相关文章推荐
js资料toString 方法
Mar 13 Javascript
js 格式化时间日期函数小结
Mar 20 Javascript
AJAX分页的代码(后台asp.net)
Feb 14 Javascript
JS获取页面input控件中所有text控件并追加样式属性
Feb 25 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
基于JavaScript实现验证码功能
Apr 01 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
深入浅析vue-cli@3.0 使用及配置说明
May 08 Javascript
layui自定义工具栏的方法
Sep 19 Javascript
Vue-Cli项目优化操作的实现
Oct 27 Javascript
webpack是如何实现模块化加载的方法
Nov 06 Javascript
Vue父组件监听子组件生命周期
Sep 03 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python实现翻转数组功能示例
2018/01/12 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python操作MySQL数据库的方法
2018/06/20 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
python双向链表原理与实现方法详解
2019/12/03 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
年终自我鉴定
2013/10/09 职场文书
十八大报告观后感
2014/01/28 职场文书
推广活动策划方案
2014/08/23 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书