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 相关文章推荐
JavaScript入门教程(5) js Screen屏幕对象
Jan 31 Javascript
动态样式类封装JS代码
Sep 02 Javascript
实例讲解JS中数组Array的操作方法
May 09 Javascript
jQuery选择器querySelector的使用指南
Jan 23 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
vue-cli webpack 开发环境跨域详解
May 18 Javascript
Vue2.0用户权限控制解决方案的示例
Feb 10 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
Sep 19 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 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和ACCESS写聊天室(二)
2006/10/09 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
JavaScript类库D
2010/10/24 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python定义一个函数的方法
2020/06/15 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
团支部建设方案
2014/05/02 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
授权委托书样本
2014/09/25 职场文书
婚宴致辞
2015/07/28 职场文书
Python如何用re模块实现简易tokenizer
2022/05/02 Python