localStorage、sessionStorage、vuex区别和使用感悟

一、介绍及区别
localStorage的生命周期是永久;不手动在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
sessionStorage的生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭,那么所有通过sessionStorage存储的数据也会被清空。
localStorage和sessionStorage都是以文件的形式存储在本地,都是只能存储字符串类型;存储数据大小一般都是5MB。localStorage在同源的页面间是共享的(页面属于相同域名和端口); sessionStorage是在同源的窗口中始终存在的数据,但是不同的窗口或标签页间无法共享sessionStorage的信息

Vuex存储的是状态(state),这些状态存储在内存中;Vuex(响应式的)专为Vue.js应用程序开发的状态管理模式,主要用于组件之间的传值,可以存储多种数据类型,并且数据变化是响应式的;
读取内存比读取硬盘速度快,因此使用Vuex可能会比使用localStorage更快
缺点:当刷新页面时,Vuex存储的值会丢失

二、问题场景
我用的场景是打开多个窗口查看不同年度的数据,导致使用localStorage存储的年度信息被覆盖,比如A窗口是2023年,B窗口是2024年,当在打开B窗口年度切换到2024年,这时localStorage存储的就是2024,A窗口再去使用localStorage存储的年度时就变成了2024而不是正确的2023了,所以更改方案时;1:使用sessionStorage在全局存储,并存储一个中间值作为动态的key,来存储年度;2:使用vuex全局存储

// 存一个中间变量区分打开的窗口
// 判断中间变量是否存在,如果存在就移除,防止无休止的生成更多的中间变量
 if (sessionStorage.getItem('medianWindow')) sessionStorage.removeItem('medianWindow')
 // 生成0-1000的随机数
  const random = Math.round(Math.random() * 1000)
  // 将随机数储存给'medianWindow'的键值对
  sessionStorage.setItem('medianWindow', random)
  // 判断备份的随机数和存储的用户信息是否存在,如果存在移除旧的用户信息
  if (sessionStorage.getItem('medianWindowCopy') && sessionStorage.getItem(`user${sessionStorage.getItem('medianWindowCopy')}`)) {
   window.sessionStorage.removeItem(`user${sessionStorage.getItem('medianWindowCopy')}`)
  }
  // 将随机数复制一份存储为'medianWindowCopy'的键值对
  sessionStorage.setItem('medianWindowCopy', random)
  // 存储用户信息
  sessionStorage.setItem(`user${sessionStorage.getItem('medianWindow')}`, JSON.stringify(data.menuInfo))

如下图明显看出,A窗口键值为user147,B窗口键值为user58
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/32db85ad4ea747459945f9aa5d3d2b46.png

三、当刷新页面时,Vuex存储的值会丢失解决方案
3.1、手动操作本地存储:在全局监听页面刷新事件,在刷新时将Vuex中的状态值存储到本地存储(如sessionStorage)中。然后从本地存储中获取这些值,并重新赋值给Vuex的状态。最后,移除本地存储中的数据。
3.2、将Vuex中的数据直接保存到浏览器缓存中:可以将Vuex中的数据保存到sessionStorage、localStorage或cookie中。这种方法适用于需要长期保存的数据,但需要注意数据的安全性和存储空间限制。
3.3、在页面刷新的时候再次请求远程数据:可以在页面刷新的时候再次发起请求,获取远程数据并动态更新Vuex的状态。这种方法适用于少量数据,并且可以避免网络延迟的问题。
3.4、在父页面向后台请求远程数据:在父页面向后台请求远程数据,并且在页面刷新前将Vuex的数据先保存至sessionStorage(以防请求数据量过大页面加载时拿不到返回的数据)。这样可以解决大数据量存储的问题

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
localStoragevuex区别主要体现在以下几个方面: 1. 数据存储方式:vuex中的数据是存储在内存中的,当页面刷新时会丢失;而localStorage是存储在计算机本地的,刷新页面并不会丢失;sessionStorage则是在应用会话期间存储数据。 2. 数据持久性:vuex存储的全局变量在页面刷新时会丢失,因为它们存在于内存中;而localStorage的数据是永久存储的,即使刷新页面也不会丢失。 3. 作用范围:vuex的作用范围是在应用程序内部,它用于管理应用程序的状态;而localStorage的作用范围是Web浏览器,用于在浏览器中存储数据。 4. 数据类型:vuex可以存储任意类型的数据;而localStorage只能存储字符串类型的数据,如果要存储对象等非字符串类型的数据,需要使用JSON的stringify和parse方法进行处理。 5. 数据大小:vuex存储的数据受内存大小的限制;而localStorage一般可以存储约5MB左右的数据。 6. 数据共享的方式:vuex中的数据是共享的,不同组件之间可以共享同一个数据状态;而localStorage中的数据是独立的,不同页面或窗口之间不能共享同一个数据状态。 综上所述,localStoragevuex在数据存储方式、持久性、作用范围、数据类型、数据大小和数据共享的方式等方面存在明显的区别。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vuexlocalStorage 区别](https://blog.csdn.net/qq_44698161/article/details/103304257)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [VuexlocalStorage区别](https://blog.csdn.net/qq_42816270/article/details/129889461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值