pinia 重置状态插件

一、前言

测试提出,登出登录后,再次进入页面后。页面的查询项非初始状态。检查后发现,是因为查询项的值存到了store呢,从store中获取,故需要一个重置store的方法

二、pinia

查阅pinia官网后,发现pinia提供了一个reset方法可以重置状态。官网位置:重置状态

重置状态

您可以通过调用 store 上的 $reset() 方法将状态 reset 到其初始值:

const store = useStore()

store.$reset()

但是实操发现,直接调用报错

pinia.js?v=0f025a7f:1058 Uncaught (in promise) Error: 🍍: Store "data" is built using the setup syntax and does not implement $reset(). at Proxy.$reset (pinia.js?v=0f025a7f:1058:13)

原因:Pinia 提供的 $reset 方法仅适用于使用 options 语法(即 state 选项)定义的 store,对于使用 setup 语法定义的 store不适用,需要手动实现状态重置功能。

三、解决方案

手动赋值每个状态不优雅,故考虑使用pinia的插件,为pinia扩展一个reset方法

  1. 创建pinia插件
// src/store/plugins/piniaResetPlugin.js
export function createResetPlugin() {
  return ({ store }) => {
    // 保存初始状态的副本
    const initialState = JSON.parse(JSON.stringify(store.$state))

    // 定义 reset 方法
    store.$reset = () => {
      store.$patch(initialState)
    }
  }
}
  1. 注册pinia插件
// src/main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import { createResetPlugin } from './store/plugins/piniaResetPlugin'

const app = createApp(App)

const pinia = createPinia()
// 注册插件
pinia.use(createResetPlugin())

app.use(pinia)
app.mount('#app')
  1. 使用$reset方法
<template>
  <button @click="handleLogout">Logout</button>
</template>

<script>
import { useDataStore } from '@/store/interface/data'
import { useAuthStore } from '@/store/auth' // 假设有一个 auth store 用于处理登录

export default {
  setup() {
    const dataStore = useDataStore()
    const authStore = useAuthStore()
    
    const handleLogout = async () => {
      await authStore.logout()
      // 调用 reset 方法
      dataStore.$reset()
      // 其他登出逻辑
      this.$router.push('/login') // 例如,重定向到登录页
    }

    return {
      handleLogout
    }
  }
}
</script>

一个完整的插件开发,注册,使用的流程就完成啦

四、总结

通过创建一个适用于 setup 语法的 Pinia 插件,可以更优雅地为所有 stores 添加 reset 方法。这种方法确保状态重置功能在 setup 语法的 store 中也能正常工作。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue 3中,Pinia是一个状态管理库,它提供了一种简单而强大的方式来管理应用程序的状态。当需要重置数据时,可以通过以下步骤来实现: 1. 首先,在你的应用程序中安装和配置Pinia。可以使用npm或yarn来安装Pinia,并在你的Vue应用程序的入口文件中进行配置。 2. 创建一个Pinia store。在store中定义你需要管理的状态和相关的操作方法。 3. 在store中添加一个重置数据的方法。这个方法可以将所有需要重置状态设置为初始值。 4. 在你的组件中使用store。通过在组件中引入store,并使用`useStore`函数来获取store的实例。 5. 在需要重置数据的地方调用store中的重置方法。可以在组件的生命周期钩子函数中调用重置方法,或者在用户触发某个事件时调用。 下面是一个示例代码,演示了如何在Vue 3中使用Pinia来重置数据: ```javascript // 安装和配置Pinia import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' const app = createApp(App) app.use(createPinia()) // 创建一个Pinia store import { defineStore } from 'pinia' const useCounterStore = defineStore('counter', { state: () => ({ count: 0, // 其他需要管理的状态 }), actions: { increment() { this.count++ }, reset() { this.count = 0 // 重置其他状态 }, }, }) // 在组件中使用store import { useStore } from 'pinia' export default { setup() { const store = useStore() // 调用重置方法 const resetData = () => { store.reset() } return { resetData, } }, } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值