Vue 状态存储和会话存储同步清空问题解决方案(最新推荐)

 更新时间:2024年12月16日 14:33:15   作者:前端糕手  
文章介绍了在使用Pinia定义的useHeaderTabStore中,tab状态通过会话存储初始化但未在退出登录时同步清空的问题,通过在PiniaStore中定义清空tab的函数,并在退出登录时调用该函数,可以确保状态和会话存储同步清空,避免内存中残留旧数据,感兴趣的朋友一起看看吧

问题描述:

   在使用 Pinia 定义的 useHeaderTabStore中,tab状态是通过会话存储(sessionStorage)初始化的。然而在退出登录时,即使清空了会话存储中的 tab数据,重新登录后页面上的 tab数据仍然存在,这是因为 Pinia 状态在内存中仍然保留了之前的数据,未重新获取会话存储的数据。

解决方法:

  • 在 Pinia Store 中定义一个清空 tab 的函数

    • 清空内存中 tab的状态变量。
    • 同时清空会话存储中的 tab数据。
  • 在退出登录函数中调用该清空函数

    • 这样可以确保状态和会话存储同步清空

状态存储文件:

const useHeaderTabStore=defineStore('headerTab',{
state:():any=>({
tab:sessionStorage.getItem('tab')?JSON.parse(sessionStorage.getItem('tab')||'{}'): [],
currentTab:{}
}),
getters:{
  getTab():any[]{
return this.tab
  }
},
actions:{
//添加的清除tab的函数
clearTab(){
  this.tab=[]
  sessionStorage.removeItem('tab');
},
//把tab通过sessionStorage存储起来然后赋值给tab变量
setTab(val:any){
    console.log(val,'headertab')
    this.currentTab=val
    const exists = this.tab.some((item:any) => item.path === val.path)
    if (!exists) {
      console.log('Adding new tab');
      this.tab.push(val);
      sessionStorage.setItem('tab',JSON.stringify(this.tab))
    } else {
      console.log('Tab already exists');
    }
  }
}
})
export default useHeaderTabStore

退出登录函数

//一开始的问题函数
  function logout() {
  router.replace('/homePage');
 sessionStorage.removeItem('tab');
}
//修改成调用清除函数
function logout() {
  const headerTabStore = useHeaderTabStore(); // 引用 Pinia Store
  headerTabStore.clearTab(); // 调用清空函数
  router.replace('/homePage'); // 跳转到登录页或首页
}

此时再进行登录之后,tab数据任然存在页面上没有清空,但是浏览器存储已经被清空

此时可以想到状态存储的tab变量在登录之后未重新获取,而是保存之前的数据

总结

问题根因

  • 状态存储(Pinia)和会话存储(sessionStorage)未同步清空,导致 tab数据在内存中仍然存在。

解决方法

  • 在 Pinia Store 中新增 clearTab 函数,同时清空内存状态和会话存储。
  • 在退出登录时调用该清空函数,确保状态同步清空。

代码示例

  • Pinia Store 定义清空函数。
  • 在退出登录时调用clearTab ,同步状态和存储的清空操作。

效果

  • 每次退出登录后,tab状态和会话存储中的数据都会完全清空,重新登录后数据重新初始化。

到此这篇关于Vue 状态存储和会话存储同步清空问题解决方案的文章就介绍到这了,更多相关Vue 状态存储和会话存储同步清空问题解决方案内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue2.x封装预览PDF组件实践

    Vue2.x封装预览PDF组件实践

    PDFObject是一个轻量级的JavaScript库,用于在网页中嵌入和预览PDF文件,它通过简单的API调用,可以在浏览器中实现PDF文件的显示,而无需依赖任何插件,以下将详细介绍PDFObject的特点、优势及其在Vue2.x中的使用方法
    2025-12-12
  • Vue实现侧边导航栏于Tab页关联的示例代码

    Vue实现侧边导航栏于Tab页关联的示例代码

    本文主要介绍了Vue实现侧边导航栏于Tab页关联的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Vue监听Enter键的方法总结与区别

    Vue监听Enter键的方法总结与区别

    这篇文章主要给大家介绍了关于Vue监听Enter键的方法与区别的相关资料,在Vue中我们可以通过监听键盘事件来实现回车键切换焦点的功能,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • element step组件在另一侧加时间轴显示

    element step组件在另一侧加时间轴显示

    本文主要介绍了element step组件在另一侧加时间轴显示,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • vue传值的编码和解码方式

    vue传值的编码和解码方式

    这篇文章主要介绍了vue传值的编码和解码方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue学习笔记之slot插槽用法实例分析

    vue学习笔记之slot插槽用法实例分析

    这篇文章主要介绍了vue学习笔记之slot插槽用法,结合实例形式对比分析了vue使用slot插槽的相关操作技巧与注意事项,需要的朋友可以参考下
    2020-02-02
  • Vue引入Stylus知识点总结

    Vue引入Stylus知识点总结

    在本篇文章里小编给各位整理的是一篇关于Vue引入Stylus知识点总结内容,有需要的朋友们可以学习参考下。
    2020-01-01
  • vue fetch中的.then()的正确使用方法

    vue fetch中的.then()的正确使用方法

    这篇文章主要介绍了vue fetch中的.then()的正确使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Vue基础教程之条件渲染和列表渲染

    Vue基础教程之条件渲染和列表渲染

    Vue会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做会使Vue变得非常快,下面这篇文章主要给大家介绍了Vue基础教程之条件渲染和列表渲染的相关资料,需要的朋友可以参考下
    2021-11-11
  • Vue.js刷新当前页面的常见方法

    Vue.js刷新当前页面的常见方法

    这篇文章主要介绍了Vue.js刷新当前页面的常见方法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-12-12

最新评论