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之函数直接量(function(){})()
Jun 29 Javascript
认识延迟时间为0的setTimeout
May 16 Javascript
JS模拟面向对象全解(二、类型与赋值)
Jul 13 Javascript
基于jquery tab切换(防止页面刷新)
May 23 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
js数组去重的常用方法总结
Jan 24 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
node.js中的fs.existsSync方法使用说明
Dec 17 Javascript
AngularJS实现Input格式化的方法
Nov 07 Javascript
linux 后台运行node服务指令方法
May 23 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
typescript编写微信小程序创建项目的方法
Jan 29 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原理之异常机制
2010/08/21 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
Javascript 二维数组
2009/11/26 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
python select.select模块通信全过程解析
2017/09/20 Python
Python常见工厂函数用法示例
2018/03/21 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
目标责任书范文
2014/04/14 职场文书
答谢会策划方案
2014/05/12 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
小学班主任个人总结
2015/03/03 职场文书
个人总结与自我评价2015
2015/03/11 职场文书