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 状态存储和会话存储同步清空问题解决方案内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue extend学习示例讲解

    Vue extend学习示例讲解

    这篇文章主要介绍了Vue.extend使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • VUE 项目如何使用 Docker+Nginx进行打包部署

    VUE 项目如何使用 Docker+Nginx进行打包部署

    使用 Docker,你可以创建一个包含 Vue.js 应用程序的容器镜像,并在任何支持 Docker 的环境中运行该镜像,这篇文章主要介绍了VUE 项目用 Docker+Nginx进行打包部署,需要的朋友可以参考下
    2024-06-06
  • Mint UI实现A-Z字母排序的城市选择列表

    Mint UI实现A-Z字母排序的城市选择列表

    这篇文章主要为大家详细介绍了Mint UI实现A-Z字母排序的城市选择列表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 关于VanCascader默认值(地址code转换)

    关于VanCascader默认值(地址code转换)

    这篇文章主要介绍了关于VanCascader默认值(地址code转换),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • vue组件强制刷新的4种方案

    vue组件强制刷新的4种方案

    在开发过程中,有时候会遇到这么一种情况,通过动态的赋值,但是dom没有及时更新,能够获取到动态赋的值,但是无法获取到双向绑定的dom节点,这就需要我们手动进行强制刷新组件,下面这篇文章主要给大家介绍了关于vue组件强制刷新的4种方案,需要的朋友可以参考下
    2023-05-05
  • vue动态路由配置及路由传参的方式

    vue动态路由配置及路由传参的方式

    这篇文章主要介绍了vue动态路由配置,vue路由传参的方式,文中给大家提到了router-link这个组件的相关知识,需要的朋友可以参考下
    2018-05-05
  • 对vue中v-if的常见使用方法详解

    对vue中v-if的常见使用方法详解

    今天小编就为大家分享一篇对vue中v-if的常见使用方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue3如何清空Reactive定义的数组

    Vue3如何清空Reactive定义的数组

    这篇文章主要介绍了Vue3如何清空Reactive定义的数组问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • VUEX 使用 mutations的两种方式

    VUEX 使用 mutations的两种方式

    这篇文章主要介绍了VUEX 使用 mutations的两种方式,实现方式就是利用vuex中的mutations,在mutations中定义一个方法,这个方法就是把点击的index(也就是每个列表的唯一标识),传给state中的当前标识,需要的朋友可以参考下
    2023-01-01
  • vue监听滚动事件的方法

    vue监听滚动事件的方法

    这篇文章主要介绍了vue监听滚动事件的方法,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
    2020-12-12

最新评论