当前位置: 首页 > news >正文

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 中也能正常工作。

http://www.lryc.cn/news/367201.html

相关文章:

  • 一千题,No.0049(跟奥巴马一起编程)
  • 《python程序语言设计》2018版第5章第46题均值和标准方差-上部(我又一次被作者的出题击倒)
  • 自己做的精灵图制作,图片合成,卓宠,窗口置顶,磁力链下载等工具软件
  • C++协程
  • linux系统——ping命令
  • vue3第三十七节(自定义插件之自定义指令)防重指令
  • 面试高频问题----5
  • 计算机网络 —— 网络层(子网掩码和子网划分)
  • 2024 IDEA最新永久使用码教程(2099版)
  • http协议,tomcat的作用
  • 有哪些针对平台端口的常见攻击手段
  • Xcode下载安装
  • 【 k8s 标签与选择器 】
  • 【模拟-BM99 顺时针旋转矩阵】
  • 今年618,京东和爱奇艺为大屏品质“把关”
  • NSS题目练习7
  • 聊一聊大数据需求的流程
  • 老黄一举揭秘三代GPU!打破摩尔定律,打造AI帝国,量产Blackwell解决ChatGPT全球耗电难题
  • HTML静态网页成品作业(HTML+CSS)—— 家乡南宁介绍网页(2个页面)
  • 把qml程序制作成安装包(Windows)
  • 内网中redis无法连接访问问题
  • Unix环境高级编程第二版:深入探索与实战解析
  • SSL/TLS和HTTPS
  • 苹果将推出“Apple Intelligence”AI系统,专注于隐私和广泛应用|TodayAI
  • 配置Kubernetes资源管理Secret与ConfigMap
  • 韩顺平0基础学java——第19天
  • 嵌入式学习——Linux高级编程复习(目录IO、软硬连接、makefile)——day38
  • makefile与进度条
  • 操作系统总结
  • SpringCloud整合OpenFeign实现微服务间的通信