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 相关文章推荐
基于JQuery的模拟苹果桌面Dock效果(稳定版)
Oct 15 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
js的hasownproperty使用示例
Mar 02 Javascript
javascript实现根据身份证号读取相关信息
Dec 17 Javascript
jquery实现下拉框功能效果【实例代码】
May 06 Javascript
Vuejs第十二篇之动态组件全面解析
Sep 09 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
vue中实现左右联动的效果
Jun 22 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
Jan 18 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 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 socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
解析yii数据库的增删查改
2013/06/20 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
php图片裁剪函数
2018/10/31 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
Python写的一个简单监控系统
2015/06/19 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
Python类继承和多态原理解析
2020/02/05 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
C语言笔试题回忆
2015/04/02 面试题
土木工程应届生求职信
2013/10/31 职场文书
生产文员岗位职责
2014/04/05 职场文书
个人向公司借款协议书
2014/10/09 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python