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的数据类型、字面量、变量介绍
May 23 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
JavaScript中检查对象property的存在性方法介绍
Dec 30 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
基于jquery实现图片放大功能
May 07 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
浅析Vue 和微信小程序的区别、比较
Aug 03 Javascript
vue项目引入字体.ttf的方法
Sep 28 Javascript
详解node登录接口之密码错误限制次数(含代码)
Oct 25 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 读取文件的正确方法
2009/04/29 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
Node.js事件驱动
2015/06/18 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
Vue的MVVM实现方法
2017/08/16 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
详解Python的单元测试
2015/04/28 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
python实现视频分帧效果
2019/05/31 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
python生成随机红包的实例写法
2019/09/02 Python
几款好用的python工具库(小结)
2020/10/20 Python
前台接待的工作职责
2013/11/21 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
广告创意求职信
2014/03/17 职场文书
大专毕业生求职信
2014/07/05 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
好人好事演讲稿
2014/09/01 职场文书
房地产销售员岗位职责
2015/04/11 职场文书