Vue3 Pinia Store使用示例

代码示例:

import { defineStore } from "pinia";  // 导入 Pinia 的 defineStore 方法
import { ref } from "vue";           // 导入 Vue 的响应式 API ref
import { type Menu } from "@/interface"; // 导入自定义的 Menu 类型// 创建一个名为 'userMenu' 的 Store
const useUserMenuStore = defineStore("userMenu",  // Store 的唯一标识名() => {      // 使用组合式 API 的 setup 函数写法// 1. 定义当前菜单状态(响应式引用)const menu = ref<Menu[]>([]);  // 创建一个存储 Menu 数组的响应式引用// 2. 设置菜单的方法const setMenu = (newMenu: Menu[]) => {menu.value = newMenu;  // 更新菜单数据};// 3. 清除菜单的方法const removeMenu = () => {menu.value = [];       // 清空当前菜单pastMenu.value = [];   // 同时清空历史菜单};// 4. 定义历史菜单状态(响应式引用)const pastMenu = ref<Menu[]>([]);  // 创建一个存储历史菜单的响应式引用// 5. 设置历史菜单的方法const setPastMenu = (newMenu: Menu[]) => {pastMenu.value = newMenu;  // 更新历史菜单数据};// 暴露所有需要外部访问的状态和方法return { menu, setMenu, removeMenu, pastMenu, setPastMenu };},{ persist: true }  // 启用持久化插件配置(页面刷新后数据不丢失)
);export default useUserMenuStore;  // 导出 Store

核心概念解释:

  1. defineStore

    • Pinia 的核心方法,用于创建 Store

    • 第一个参数是 Store 的唯一名称

    • 第二个参数是 setup 函数,用组合式 API 编写

    • 第三个参数是配置对象,这里启用了持久化

  2. ref

    • Vue 的响应式 API,用于创建响应式数据

    • ref<Menu[]> 表示这是一个存储 Menu 类型数组的响应式引用

    • 通过 .value 访问/修改值(但在模板中会自动解包,不需要 .value)

  3. 类型系统

    • Menu 是自定义类型(来自 @/interface)

    • TypeScript 泛型 <Menu[]> 确保数据类型的正确性

  4. 方法功能

    • setMenu:更新当前菜单

    • removeMenu:清空所有菜单数据

    • setPastMenu:更新历史菜单

  5. 持久化配置

    • { persist: true } 表示启用状态持久化

    • 需要配合 pinia-plugin-persistedstate 插件使用

    • 数据会保存在 localStorage 中,防止页面刷新丢失

使用场景示例:

javascript

// 在组件中使用
import useUserMenuStore from '@/stores/userMenu';const menuStore = useUserMenuStore();// 更新菜单
menuStore.setMenu([{ id: 1, name: '首页' }]);// 获取当前菜单
console.log(menuStore.menu); // 清空菜单
menuStore.removeMenu();

新手需要注意:

  1. 响应式规则

    • 在 JS 中修改状态需要使用 .value

    • 在模板中直接使用变量名即可

  2. Store 的生命周期

    • 单例模式:整个应用共享同一个 Store 实例

    • 持久化数据会一直保留,直到手动清除或用户清除浏览器缓存

  3. 类型安全

    • TypeScript 的类型约束可以帮助减少错误

    • 如果传递错误类型的参数,编译时会报错

这个 Store 的设计非常适合管理需要持久化的全局界面状态(比如用户菜单、主题设置等),通过分离状态逻辑使组件更专注于视图渲染。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript逆向魔法:Chrome开发者工具探秘之旅

在前端开发和安全研究领域&#xff0c;JavaScript逆向工程是一项关键技能。它涉及分析和理解代码的执行流程、数据结构和逻辑&#xff0c;以发现潜在的安全漏洞、提取核心算法或实现功能兼容。本文将结合Chrome开发者工具的调试功能&#xff0c;并通过具体示例帮助你更好地理解…

Qt基础:资源文件

资源文件 1. 资源文件2. 资源文件创建 1. 资源文件 资源文件顾名思义就是一个存储资源的文件&#xff0c;在Qt中引入资源文件好处在于他能提高应用程序的部署效率并且减少一些错误的发生。 在程序编译过程中&#xff0c; 添加到资源文件中的文件也会以二进制的形式被打包到可执…

Agent TARS与Manus的正面竞争

Agent TARS 是 Manus 的直接竞争对手&#xff0c;两者在 AI Agent 领域形成了显著的技术与生态对抗。 一、技术架构与功能定位的竞争 集成化架构 vs 模块化设计 Agent TARS 基于字节跳动的 UI-TARS 视觉语言模型&#xff0c;将视觉感知、推理、接地&#xff08;grounding&#…

使用ssh连接上开发板

最后我发现了问题&#xff0c;我忘记指定用户名了&#xff0c;在mobaXterm上左上角打开会话&#xff0c;点击ssh&#xff0c;然后输入要连接的开发板主机的ip地址&#xff0c;关键在这里&#xff0c;要指定你要连接的开发板的系统中存在的用户&#xff0c;因为通过ssh连接一个设…

【性能优化点滴】odygrd/quill在编译期做了哪些优化

Quill 是一个高性能的 C 日志库&#xff0c;它在编译器层面进行了大量优化以确保极低的运行时开销。以下是 Quill 在编译器优化方面的关键技术和实现细节&#xff1a; 1. 编译时字符串解析与格式校验 Quill 在编译时完成格式字符串的解析和校验&#xff0c;避免运行时开销&…

【数据结构】排序算法(中篇)·处理大数据的精妙

前引&#xff1a;在进入本篇文章之前&#xff0c;我们经常在使用某个应用时&#xff0c;会出现【商品名称、最受欢迎、购买量】等等这些榜单&#xff0c;这里面就运用了我们的排序算法&#xff0c;作为刚学习数据结构的初学者&#xff0c;小编为各位完善了以下几种排序算法&…

混杂模式(Promiscuous Mode)与 Trunk 端口的区别详解

一、混杂模式&#xff08;Promiscuous Mode&#xff09; 1. 定义与工作原理 定义&#xff1a;混杂模式是网络接口的一种工作模式&#xff0c;允许接口接收通过其物理链路的所有数据包&#xff0c;而不仅是目标地址为本机的数据包。工作层级&#xff1a;OSI 数据链路层&#x…

大学生机器人比赛实战(一)综述篇

大学生机器人比赛实战 参加机器人比赛是大学生提升工程实践能力的绝佳机会。本指南将全面介绍如何从零开始准备华北五省机器人大赛、ROBOCAN、RoboMaster等主流机器人赛事&#xff0c;涵盖硬件设计、软件开发、算法实现和团队协作等关键知识。 一、比赛选择与准备策略 1.1 主…

【Linux】动静态库知识大梳理

亲爱的读者朋友们&#x1f603;&#xff0c;此文开启知识盛宴与思想碰撞&#x1f389;。 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 在 Linux 系统编程中&#xff0c;动静态库是重要的组成部分&#xff0…

06-公寓租赁项目-后台管理-公寓管理篇

尚庭公寓项目/公寓管理模块 https://www.yuque.com/pkqzyh/qg2yge/5ba67653b51379d18df61b9c14c3e946 一、属性管理 属性管理页面包含公寓和房间各种可选的属性信息&#xff0c;其中包括房间的可选支付方式、房间的可选租期、房间的配套、公寓的配套等等。其所需接口如下 1.1…

Links for llama-cpp-python whl安装包下载地址

Links for llama-cpp-python whl安装包下载地址 Links for llama-cpp-python whl安装包下载地址 https://github.com/abetlen/llama-cpp-python/releases

为境外组织提供企业商业秘密犯法吗?

企业商业秘密百问百答之九十六&#xff1a;为境外组织提供企业商业秘密犯法吗&#xff1f; 在日常的对外交流中&#xff0c;企业若暗中为境外的机构、组织或人员窃取、刺探、收买或非法提供商业秘密&#xff0c;这种行为严重侵犯了商业秘密权利人的合法权益&#xff0c;更深远…

grep 命令详解(通俗版)

1. 基础概念 grep 是 Linux 下的文本搜索工具&#xff0c;核心功能是从文件或输入流中筛选出包含指定关键词的行。 它像“文本界的搜索引擎”&#xff0c;能快速定位关键信息&#xff0c;特别适合日志分析、代码排查等场景。 2. 基础语法 grep [选项] "搜索词" 文件…

JSVMP逆向实战:原理分析与破解思路详解

引言 在当今Web安全领域&#xff0c;JavaScript虚拟机保护&#xff08;JSVMP&#xff09;技术被广泛应用于前端代码的保护和反爬机制中。作为前端逆向工程师&#xff0c;掌握JSVMP逆向技术已成为必备技能。本文将深入剖析JSVMP的工作原理&#xff0c;并分享实用的逆向破解思路…

【youcans论文精读】弱监督深度检测网络(Weakly Supervised Deep Detection Networks)

欢迎关注『youcans论文精读』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans论文精读】弱监督深度检测网络 WSDDN 0. 弱监督检测的开山之作0.1 论文简介0.2 WSDNN 的步骤0.3 摘要 1. 引言2. 相关工作3. 方法3.1 预训练网络3.2 弱监督深度检测网络3.3 WSDDN训练3.4 空间…

基于Contiue来阅读open-r1中的GRPO训练代码

原创 快乐王子HP 快乐王子AI说 2025年04月03日 23:54 广东 前面安装了vscode[1]同时也安装了Coninue的相关插件[2]&#xff0c;现在想用它们来阅读一下open-r1项目的代码[3]。 首先&#xff0c;从启动训练开始(以GRPO为例子&#xff09; 第一步&#xff0c;使用TRL的vLLM后端…

JVM深入原理(六)(二):双亲委派机制

目录 6.5. 类加载器-双亲委派机制 6.5.1. 双亲委派机制-作用 6.5.2. 双亲委派机制-工作流程 6.5.3. 双亲委派机制-父加载器 6.5.4. 双亲委派机制-面试题 6.5.5. 双亲委派机制-代码主动加载一个类 6.6. 类加载器-打破双亲委派机制 6.6.1. 打破委派-ClassLoader原理 6.6.…

Linux 文件系统超详解

一.磁盘 磁盘是计算机的主要存储介质&#xff0c;它可以存储大量二进制数据&#xff0c;即使断电后也可以保证数据不会丢失。下面我们将了解磁盘的物理结构、存储结构以及逻辑结构。 磁盘的存储结构 1. 磁盘寻址的时候&#xff0c;基本单位既不是bit也不是byte&#xff0c;而…

2025年大模型与Transformer架构:重塑AI未来的科技革命

引言&#xff1a;一场关于智能的革命 想象一下&#xff0c;当你向一个虚拟助手提问时&#xff0c;它不仅能够准确理解你的需求&#xff0c;还能生成一段流畅且富有逻辑的回答&#xff1b;或者当你上传一张模糊的照片时&#xff0c;系统可以快速修复并生成高清版本——这一切的…

GO语言学习(16)Gin后端框架

目录 ☀️前言 1.什么是前端&#xff1f;什么是后端&#xff1f;&#x1f300; 2.Gin框架介绍 &#x1f337; 3.Gin框架的基本使用 -Hello&#xff0c;World例子&#x1f337; &#x1f33f;入门示例 - Hello&#xff0c;World &#x1f4bb;补充&#xff08;一些常用的网…