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 文件传参及处理技巧分析
May 13 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
js网页中的(运行代码)功能实现思路
Feb 04 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
jqGrid读取选择的多行的某个属性代码
May 18 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
js模块加载方式浅析
Aug 12 Javascript
vue params、query传参使用详解
Sep 12 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
ES6 javascript中class类的get与set用法实例分析
Oct 30 Javascript
详解JavaScript 中 if / if...else...替换方式
Jul 15 Javascript
ant design vue datepicker日期选择器中文化操作
Oct 28 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之第一天
2006/10/09 PHP
十天学会php之第三天
2006/10/09 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
PHP获取文件行数的方法
2015/06/10 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
JavaScript中的Array对象使用说明
2011/01/17 Javascript
js的一些常用方法小结
2011/06/29 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
js模糊查询实例分享
2016/12/26 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
python3学生名片管理v2.0版
2018/11/29 Python
pandas计数 value_counts()的使用
2019/06/24 Python
Python阶乘求和的代码详解
2020/02/14 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
Python 里最强的地图绘制神器
2021/03/01 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
党校培训思想汇报
2014/01/03 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL