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

vue3 ts pinia

下面给你一套「能直接复制用、结构清晰、企业级规范」的 Pinia 分组 模块间调用完整示例代码。✅ Vue 3✅ TypeScript✅ Pinia✅ 模块化✅ 有 state / getter / action✅ 有模块间调用一、目录结构重点src/ ├── store/ │ ├── modules/ │ │ ├── user.ts │ │ └── order.ts │ ├── index.ts │ └── types.ts二、类型定义store/types.ts// 用户exportinterfaceUserInfo{id:numbername:string}// 订单exportinterfaceOrder{id:numbertitle:stringprice:number}三、user 模块store/modules/user.tsimport{defineStore}frompiniaimport{ref,computed}fromvueimporttype{UserInfo}from../typesexportconstuseUserStoredefineStore(user,(){// state consttokenref()constuserInforefUserInfo|null(null)// getter constisLogincomputed(()!!token.value)// action functionsetToken(val:string){token.valueval}functionsetUserInfo(info:UserInfo){userInfo.valueinfo}functionlogout(){token.valueuserInfo.valuenull}return{token,userInfo,isLogin,setToken,setUserInfo,logout,}})四、order 模块store/modules/order.ts✅这里演示「调用 user 模块」import{defineStore}frompiniaimport{ref,computed}fromvueimport{useUserStore}from./userimporttype{Order}from../typesexportconstuseOrderStoredefineStore(order,(){// state constorderListrefOrder[]([])// getter consttotalPricecomputed(()orderList.value.reduce((sum,item)sumitem.price,0))// action functionsubmitOrder(order:Order){constuserStoreuseUserStore()if(!userStore.isLogin){thrownewError(请先登录)}orderList.value.push(order)}return{orderList,totalPrice,submitOrder,}})✅关键点constuserStoreuseUserStore()userStore.isLogin五、统一导出store/index.tsimport{createPinia}frompiniaimporttype{App}fromvueexportconstpiniacreatePinia()exportfunctionsetupStore(app:App){app.use(pinia)}// 模块统一导出export*from./modules/userexport*from./modules/order六、main.ts 注册import{createApp}fromvueimportAppfrom./App.vueimport{setupStore}from./storeconstappcreateApp(App)setupStore(app)app.mount(#app)七、在组件中使用完整示例1️⃣ 使用 user storescript setup langts import { useUserStore } from /store const userStore useUserStore() /script template div p是否登录{{ userStore.isLogin }}/p button clickuserStore.setToken(abc123)登录/button button clickuserStore.logout退出/button /div /template2️⃣ 使用 order store并调用 userscript setup langts import { useOrderStore } from /store import { useUserStore } from /store const orderStore useOrderStore() const userStore useUserStore() /script template div button :disabled!userStore.isLogin clickorderStore.submitOrder({ id: 1, title: 商品A, price: 99 }) 提交订单 /button ul li v-foritem in orderStore.orderList :keyitem.id {{ item.title }} - ¥{{ item.price }} /li /ul p总价¥{{ orderStore.totalPrice }}/p /div /template八、模块调用关系图很重要App ├── useUserStore └── useOrderStore └── useUserStore跨模块调用✅Pinia 官方推荐这种方式✅ 无需 event bus✅ 无层级嵌套一、Pinia 是什么核心认知✅ Vue 官方状态管理库✅ Vuex 的继任者✅ 专为 Vue 3 Composition API 设计核心特点没有 mutations ✅完整的 TS 支持 ✅模块化天生支持 ✅支持 DevTools ✅支持服务端渲染SSR✅二、Pinia 基础知识点必会1️⃣ 创建 Piniaimport{createPinia}frompiniaconstpiniacreatePinia()app.use(pinia)2️⃣ 定义 Store两种写法✅ 组合式推荐exportconstuseUserStoredefineStore(user,(){consttokenref()functionsetToken(val:string){token.valueval}return{token,setToken}})⚠️ 选项式了解exportconstuseUserStoredefineStore(user,{state:()({token:}),actions:{setToken(val:string){this.tokenval},},})3️⃣ State状态constcountref(0)等价于state:()({count:0})✅ 响应式✅ 支持ref / reactive4️⃣ Getter派生状态constdoublecomputed(()count.value*2)✅ 缓存✅ 类似 Vue computed5️⃣ Action修改状态functionincrement(){count.value}✅ 同步 / 异步都可以✅ 不需要 mutation三、Pinia 进阶知识点中高级6️⃣ Store 的使用方式constuserStoreuseUserStore()userStore.setToken(xxx)✅ 可在setup普通函数service非组件代码中调用7️⃣ 多 Store 之间通信constuserStoreuseUserStore()constorderStoreuseOrderStore()✅ 天然支持✅ 无嵌套地狱8️⃣ Store 分组 / 模块化store/ ├── user.ts ├── order.ts✅ 推荐按业务拆分✅ 不要一个 store 管全部9️⃣ Store 重置resetuserStore.$reset()✅ 重置为初始 state 订阅状态变化userStore.$subscribe((mutation,state){console.log(mutation,state)})✅ 用于埋点 / 日志 / 调试四、Pinia 高级知识点企业级1️⃣1️⃣ 持久化非常常见npmi pinia-plugin-persistedstateexportconstuseUserStoredefineStore(user,(){...},{persist:true,})1️⃣2️⃣ SSR / Nuxt 支持conststoreuseUserStore(pinia)✅ 同构渲染✅ hydration 自动处理1️⃣3️⃣ Store 的解构必须知道❌ 错误失去响应性const{token}userStore✅ 正确import{storeToRefs}frompiniaconst{token}storeToRefs(userStore)1️⃣4️⃣ Store 作为参数传递解耦functionlogout(userStore:ReturnTypetypeofuseUserStore){userStore.$reset()}1️⃣5️⃣ 自定义插件高级exportfunctionmyPiniaPlugin({store}){store.$onAction(({name,args}){console.log(name,args)})}五、Pinia 与 Vuex 对比面试高频对比项PiniaVuexmutations❌✅TS 支持✅✅✅⚠️模块化原生手动代码体积更小较大官方态度✅ 推荐❌ 维护模式六、Pinia 最佳实践企业级总结✅ 一个业务一个 store✅ 用组合式 API✅ store 只管状态不管请求✅ 请求放在 service 层✅ 大型项目用 domain 分层七、Pinia 学习路线建议基础用法 ↓ 模块化分组 ↓ TS 类型设计 ↓ 持久化 ↓ 工程化拆分store / service / model ↓ 性能 架构优化下面我按「面试标准答案 加分点」的方式把这 6 个 Pinia 高频问题一次性讲清楚你可以直接背也可以理解后用自己的话讲。1️⃣ Pinia 和 Vuex 的区别必考✅ 标准答案对比点PiniaVuex官方定位Vue3 官方推荐Vue2 时代产物mutations❌ 移除✅ 必须有actions支持同步 / 异步支持模块化天生支持需要 namespaceTypeScript原生友好类型复杂代码体积更小较大心智模型简单偏重✅ 加分一句话Pinia 是 Vuex 的精神继承者专门为 Vue 3 和 Composition API 设计。2️⃣ 为什么 Pinia 不需要 mutation✅ 标准答案mutation 的存在是为了追踪同步变更Pinia 使用ref / reactiveVue DevTools 已经能追踪.value的变化同步 / 异步都可以在 action 中完成✅ 面试原话在 Pinia 中state 本身就是响应式的action 可以直接修改 state不再需要 mutation 这一层约束。3️⃣ Pinia 的 state 本质是什么✅ 标准答案在组合式写法中constcountref(0)state 的本质就是ref或reactive对象Pinia 内部会把它们收集起来暴露给 DevTools 和插件。✅ 一句话总结Pinia 的 state Composition API 的响应式数据4️⃣ 如何在组件外使用 Pinia高频✅ 场景serviceutils请求拦截器非 Vue 文件✅ 标准写法import{createPinia}frompiniaconstpiniacreatePinia()constuserStoreuseUserStore(pinia)✅ 在项目中已注册import{useUserStore}from/storeconstuserStoreuseUserStore()✅ 面试加分点Pinia 不依赖组件上下文只要传入 pinia 实例即可在任何地方使用。5️⃣ Pinia 如何实现持久化✅ 标准答案最常用使用官方生态插件npmi pinia-plugin-persistedstateexportconstuseUserStoredefineStore(user,(){...},{persist:true,})✅ 可配置persist:{key:user-store,storage:localStorage,}✅ 加分点Pinia 本身不负责持久化通过插件机制实现符合单一职责原则。6️⃣ storeToRefs 是干嘛的✅ 问题背景const{token}userStore// ❌ 失去响应性✅ 正确答案import{storeToRefs}frompiniaconst{token}storeToRefs(userStore)✅ 原理简述store 本身是 reactive直接解构会破坏响应性storeToRefs只把 state / getter 转成refstoreToRefs用于在解构 Pinia store 时保留响应性。✅Composition API✅去掉 mutation✅TypeScript 原生支持

相关文章:

vue3 ts pinia

下面给你一套 「能直接复制用、结构清晰、企业级规范」的 Pinia 分组 模块间调用完整示例代码。 ✅ Vue 3 ✅ TypeScript ✅ Pinia ✅ 模块化 ✅ 有 state / getter / action ✅ 有模块间调用一、目录结构(重点) src/ ├── store/ │ ├── module…...

思源宋体CN终极指南:免费获取7种专业中文字体的完整方案

思源宋体CN终极指南:免费获取7种专业中文字体的完整方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为寻找高质量中文字体而烦恼吗?今天我要向你推荐一…...

基于RAG与本地化部署的ChatLLM框架:构建私有知识库问答系统实战

1. 项目概述:ChatLLM,一个面向开发者的本地化大语言模型应用框架最近在折腾本地部署的大语言模型应用,发现很多开源项目要么太重,要么太轻,要么就是文档写得云里雾里,想快速搭建一个能基于自己知识库对话的…...

Windows PDF处理工具:3分钟掌握Poppler预编译包全攻略

Windows PDF处理工具:3分钟掌握Poppler预编译包全攻略 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows系统上的PDF处理烦…...

思维之树框架:用搜索算法提升大语言模型复杂推理能力

1. 项目概述:从“链式思考”到“思维之树”的跃迁 如果你已经玩过一阵子大语言模型,对“链式思考”肯定不陌生。简单来说,就是让模型在给出最终答案前,先一步步写下推理过程。这招对付数学题、逻辑谜题效果拔群,因为它…...

微服务架构实战:从单体到独立WebChat Channel的容器化部署

1. 项目概述:从单体到微服务的WebChat Channel实战最近在重构一个基于CoPaw的智能体项目,核心需求是为其增加一个独立的网页聊天通道(WebChat Channel)。原有的CoPaw服务是一个功能强大的单体后端,但直接在其上集成Web…...

AI Agent技能库实战:153个专业提示词赋能SEO与CRO工作流

1. 项目概述:一个为AI Agent打造的“技能武器库”如果你和我一样,每天都在和Claude Code、Cursor这类AI编程助手打交道,那你肯定也遇到过这样的时刻:想让AI帮你写一篇高质量的SEO文章,或者优化一个着陆页的转化率&…...

CursorVIPFeedback:结构化反馈如何提升AI编程工具体验

1. 项目概述与核心价值最近在开发者社区里,一个名为“DevCicadaQ/CursorVIPFeedback”的项目引起了我的注意。乍一看这个标题,你可能会觉得它只是一个普通的GitHub仓库,但如果你是一位深度使用Cursor编辑器,尤其是对其VIP功能&…...

欧盟AI法案解读:风险分级监管与秩序自由主义治理逻辑

1. 项目概述:当AI遇见欧洲秩序最近,欧盟的《人工智能法案》正式走完了立法程序,成为全球首个全面、系统的人工智能监管法规。这不仅是科技界的大事,更是全球数字治理领域的一个里程碑事件。作为一名长期关注技术与政策交叉领域的从…...

AI协同编程:从代码生成到项目级开发的智能辅助实践

1. 项目概述:当AI成为你的技术合伙人最近在GitHub上看到一个挺有意思的项目,叫“ai-cofounder”。光看名字就挺吸引人,AI联合创始人?这听起来像是科幻电影里的情节。但点进去仔细研究后,我发现,这其实是一个…...

Python自动化掘金工具:自然语言驱动内容管理与爬虫实战

1. 项目概述:一个能听懂人话的掘金自动化工具如果你是一个技术社区的活跃创作者,或者是一个喜欢从掘金上“淘金”的学习者,那么下面这个场景你一定不陌生:想看看今天前端领域有什么新趋势,得手动打开掘金,点…...

awesome-tui-design:用Markdown设计文档驱动AI构建终端界面

1. 项目概述:当AI遇上终端界面设计 如果你和我一样,是个常年泡在终端里的开发者,肯定有过这样的体验:想用AI助手(比如Cursor、Claude Code或者GitHub Copilot Chat)快速搭建一个命令行工具的原型&#xff…...

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

1. 项目概述:一个用JavaScript驱动的超可爱桌面机器人 如果你和我一样,对桌面上的小玩意儿情有独钟,同时又对硬件编程和机器人技术充满好奇,那么 Stack-chan 绝对是一个会让你眼前一亮的项目。它不是一个简单的摆件&#xff0c…...

解锁AI潜能:系统提示词设计模式与实战应用指南

1. 项目概述:一个被低估的ChatGPT系统提示词仓库 如果你经常和ChatGPT、Claude这类大模型打交道,肯定遇到过这样的场景:你提了一个问题,但模型的回答要么过于笼统,要么完全跑偏,跟你想要的格式或深度差了十…...

开源学术写作工具箱:自动化工作流提升研究效率

1. 项目概述:一个为学术写作而生的开源工具箱 如果你是一名研究生、博士生,或者任何需要与学术论文、研究报告打交道的研究者,那么你一定对写作过程中的那些“琐碎但必要”的环节深有体会。从文献管理、格式排版,到数据可视化、参…...

基于大语言模型的自动化知识图谱模式生成:原理、实践与应用

1. 项目概述:当大模型学会“画图”,知识图谱构建进入自动化时代如果你也和我一样,曾经被构建知识图谱(Knowledge Graph, KG)那繁琐、耗时且高度依赖人工标注的流程折磨过,那么看到“AutoSchemaKG”这个名字…...

Sverklo:为AI编程助手注入代码结构智能,实现精准搜索与安全重构

1. 项目概述:当AI助手开始“理解”你的代码如果你和我一样,日常重度依赖像Claude Code、Cursor这类AI编程助手,那你一定也经历过那种“血压升高”的时刻:你让它修改一个核心函数,它改得飞快,代码看起来也像…...

智能字典生成器:从规则引擎到安全测试的自动化密码构造

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“dictator”。光看名字,你可能会联想到一些不太好的东西,但在技术圈里,这个名字其实挺直白的——它就是一个“字典生成器”。不过,别小看它&#xff0c…...

探索Nginx:深入理解Nginx基础组件的使用

1.1、ngx_palloc相关源码 /src/core/ngx_palloc.h。&#xff08;相关实现在/src/core/ngx_palloc.c文件&#xff09; 展开 代码语言&#xff1a;C 自动换行 AI代码解释 #ifndef _NGX_PALLOC_H_INCLUDED_ #define _NGX_PALLOC_H_INCLUDED_ #include <ngx_config.h> #i…...

掌握pip的基本命令和高级用法:轻松管理Python包

Ubuntu系统安装pip&#xff1a; 打开终端&#xff0c;输入以下命令以更新软件包列表&#xff1a; sudo apt-get update 安装pip包&#xff1a; sudo apt-get install python3-pip 安装完成后&#xff0c;可以通过以下命令来验证pip是否成功安装&#xff1a; pip3 --version …...

隐私优先的本地化个人基因组分析工具:从数据到洞察的完整指南

1. 项目概述&#xff1a;一个隐私优先的本地化个人基因组分析工具 如果你和我一样&#xff0c;对消费级基因检测报告里那些“你有2.1%的尼安德特人血统”或者“你患某种疾病的风险是平均水平的1.2倍”的模糊描述感到不满足&#xff0c;同时又对将原始DNA数据上传到云端心存顾虑…...

从零构建智能代码解释器:LLM与沙箱的工程实践

1. 项目概述&#xff1a;当代码有了“思考”的能力最近在GitHub上看到一个挺有意思的项目&#xff0c;叫haseeb-heaven/code-interpreter。光看名字&#xff0c;你可能觉得这又是一个普通的代码执行工具&#xff0c;或者一个在线编程环境。但如果你点进去&#xff0c;花点时间研…...

Claudish:轻量级Claude API代理网关的设计与实战

1. 项目概述&#xff1a;Claudish&#xff0c;一个为Claude API设计的轻量级代理网关 如果你最近在尝试将Anthropic的Claude模型集成到自己的应用里&#xff0c;大概率会遇到一个头疼的问题&#xff1a;官方API的调用方式&#xff0c;特别是流式响应&#xff08;Streaming&…...

大模型智能路由引擎:动态调度多AI模型实现降本增效

1. 项目概述&#xff1a;一个技能模型路由器的诞生最近在折腾大模型应用开发的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;如何高效、低成本地管理和调用多个不同能力的AI模型。无论是OpenAI的GPT系列、Claude&#xff0c;还是开源的Llama、Qwen&#xff0c;每个模型…...

【汽车芯片功能安全分析与故障注入实践 08】Diagnostic Coverage 是怎么算出来的?

作者&#xff1a; Darren H. Chen 方向&#xff1a; 汽车芯片功能安全分析与故障注入实践 Demo&#xff1a; D08_dc_engine 标签&#xff1a; 汽车芯片 功能安全 Diagnostic Coverage DC Safety Mechanism FMEDADemo 说明 D08_dc_engine 的目标是实现一个简化但可解释的 Diagno…...

Orcha:为AI编程助手构建微服务架构感知的智能工作空间

1. 项目概述&#xff1a;为AI智能体装上“工作空间大脑” 如果你和我一样&#xff0c;正在一个由多个独立代码仓库组成的微服务架构里折腾&#xff0c;并且尝试用Claude Code、Cursor这类AI编程助手来提升效率&#xff0c;那你肯定遇到过这样的场景&#xff1a;每次打开一个新的…...

macOS智能鼠标模拟器:告别远程会话超时,保持连接活跃

1. 项目概述&#xff1a;一个为macOS设计的智能鼠标模拟器如果你和我一样&#xff0c;经常需要远程连接到公司的开发机&#xff0c;或者长时间在虚拟机里跑一些测试任务&#xff0c;那你一定对“会话超时断开”这个烦人的问题深恶痛绝。无论是微软的远程桌面、VNC&#xff0c;还…...

iButton数据记录器:冷链监控与环境监测技术详解

1. iButton数据记录器概述iButton数据记录器是Maxim Integrated公司推出的一款微型环境监测设备&#xff0c;外形仅相当于五枚叠放的硬币大小&#xff08;16mm直径&#xff09;。这种不锈钢封装的设备内置温度传感器&#xff08;部分型号含湿度传感器&#xff09;、实时时钟、非…...

从思维链到思维图:GoT框架如何革新大语言模型推理

1. 项目概述&#xff1a;从“思维链”到“思维图”的范式跃迁如果你最近在关注大语言模型&#xff08;LLM&#xff09;的应用与推理能力增强&#xff0c;那么“思维链”&#xff08;Chain-of-Thought, CoT&#xff09;这个词你一定不陌生。它通过让模型“一步一步思考”&#x…...

通过用量看板观测TaotokenAPI调用成本与模型消耗分布

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过用量看板观测Taotoken API调用成本与模型消耗分布 接入大模型服务后&#xff0c;成本管理是开发者持续关注的核心议题。直接使…...