vue基础(第四章 Pinia)
1:Pinia 西班牙语菠萝1.1:Pinia是什么Pinia 是Vue 官方新一代状态统一管理库当数据需要在多个不相关的组件间共享的时候需要使用Pinia类似 Redis 集中缓存。专门为vue2和vue3设计是Vuex 的替代方案。Vue 3 官方已推荐新项目直接使用 Pinia不再主推 Vuex。我们在上一章节的路由器中学习了组件之间传递数据比如多层嵌套、兄弟组件、跨页面路由之间数据传递会非常麻烦。很麻烦但是pinia可以完美的结局这个问题 Pinia把公共数据放到全局仓库 (store)任意组件都可以直接读取、修改。F5 刷新页面Pinia 清空前端重新请求接口再回填 Pinia。补充如果想让 Pinia 拥有类似 redis “持久化” 效果前端可以搭配pinia‑plugin‑persistedstate把数据存到浏览器localStorage。localStorage 相当于浏览器本地小磁盘但依然只属于这台电脑这个浏览器别的设备访问不到和后端 Redis 不是一回事。1.2:有什么作用管理跨组件共享全局状态场景举例工业后台 / MES 系统经常用到用户登录信息、token、角色权限、菜单列表页面全局配置、筛选条件缓存多个页面共享的设备列表、工单筛选参数弹窗全局状态、消息通知如果不用状态库组件之间多层传参props 层层传递代码耦合严重 使用 Pinia任意组件直接读取 / 修改全局状态1.3:Pinia 对比 Vuex 核心优势面试必说移除了 MutationVuex修改 state 必须走 mutation同步、action 处理异步模板代码繁琐 Pinia可以直接修改 state异步逻辑写在 action 里结构简单。没有嵌套 modulesVuex 模块嵌套store.user.token Pinia 每个 store 是独立文件扁平结构导入即用不用命名空间 namespaced。原生 TypeScript 支持极好类型自动推导不需要额外复杂类型声明非常适合script setup TS 项目。代码更简洁样板代码极少不需要commit、dispatch降低学习成本。支持组件外部调用 store路由守卫、axios 拦截器里可以直接引入 store 操作状态Vuex 也能实现但 Pinia 更顺畅。Devtools 调试友好支持时间旅行调试。1.4:Pinia的核心状态Pinia 三大核心概念state状态存放共享数据等同于 Vuex 的 stategettters派生状态相当于计算属性有缓存actions修改状态方法支持同步、异步替代 Vuex mutation action2:实战开始2.1:使用pinia之前组件count.vuetemplate div h1pinia的person组件/h1 h2计数器{{ count }}/h2 名字input typetext v-modelname{{ name }} hr !-- v-model双向数据绑定。影响value属性 -- select v-model.numbern option value11/option option value22/option option value33/option /select button clickadd数字/button button clickminus-数字/button /div /template script setup langts import { ref } from vue; let name ref(张三); console.log(name); // 计数器方法 let count ref(0); let n ref(1); function add() { count.value n.value; } function minus() { count.value - n.value; } /script style/style2.2:使用pinia做状态集中管理1:首先安装pinianpm install pinia2:在main.ts中使用piniaimport { createApp } from vue import { createPinia } from pinia import App from ./App.vue const app createApp(App) //创建pinia const pinia createPinia() //使用pinia app.use(pinia) app.mount(#app)2.3:新建store下的count.ts 操作piniaimport { defineStore } from pinia; //定义仓库 const userCountStore defineStore(count, { //状态 state存放共享数据等同于 Vuex 的 state state() { //返回数据 return { name:张三, count: 0, n: 1, }; }, // Actions修改状态的方法支持同步/异步替代Vuex mutationaction actions: { add2():void { this.count this.n; }, minus2() { this.count - this.n; }, // 异步示例 async changeName(newName: string) { // 可以在这里请求后端接口 this.name newName; }, }, }); //导出仓库 默认单利多组件共享 //export default userCountStore; export { userCountStore };2.4:count.vue组件使用piniatemplate div h1pinia的person组件/h1 h2计数器{{ count }}/h2 名字input typetext v-modelname{{ name }} hr !-- v-model双向数据绑定。影响value属性 -- select v-model.numbern option value11/option option value22/option option value33/option /select button clickadd数字/button button clickminus-数字/button hr h1使用pinia/h1 h2计数器{{ countStore.count }}/h2 !-- v-model双向数据绑定。影响value属性 -- select v-model.numbercountStore.n option value11/option option value22/option option value33/option /select button clickadd1数字/button button clickminus1-数字/button hr button clickadd11数字/button button clickminus11-数字/button hr /div /template script setup langts import { ref } from vue; import { userCountStore } from ../store/count let name ref(张三); console.log(name); //1:不实用pinia 计数器方法 let count ref(0); let n ref(1); function add() { count.value n.value; } function minus() { count.value - n.value; } //2:使用pinia, 得到单利的countStore let countStore userCountStore() function add1() { countStore.count countStore.n; } function minus1() { countStore.count - countStore.n; } function add11() { //通过仓库调用方法 countStore.add2(); } function minus11() { //通过仓库调用方法 countStore.minus2(); } /script style/style2.5:storeToRefsstoreToRefs是 Pinia 提供的工具函数专门用来安全解构 Store 中的 state、getter保证解构出来的变量依旧保留响应式。template div h1pinia的person组件/h1 h2计数器{{ count }}/h2 名字input typetext v-modelname{{ name }} hr !-- v-model双向数据绑定。影响value属性 select v-model.numbern option value11/option option value22/option option value33/option /select button clickadd数字/button button clickminus-数字/button -- hr h1使用pinia/h1 h2计数器{{ count }}/h2 !-- v-model双向数据绑定。影响value属性 -- select v-model.numbern option value11/option option value22/option option value33/option /select button clickadd1数字/button button clickminus1-数字/button hr button clickadd11数字/button button clickcountStore.minus2-数字/button hr /div /template script setup langts import { ref } from vue; import { userCountStore } from ../store/count import { storeToRefs } from pinia; let name ref(张三); console.log(name); // //1:不实用pinia 计数器方法 // let count ref(0); // let n ref(1); // function add() { // count.value n.value; // } // function minus() { // count.value - n.value; // } //2:使用pinia, 得到单利的countStore let countStore userCountStore() //storeToRefs结构才能响应式 let {count,n}storeToRefs(countStore); //这两个对象也有了响应式 function add1() { countStore.count countStore.n; } function minus1() { countStore.count - countStore.n; } function add11() { //通过仓库调用方法 countStore.add2(); } function minus11() { //通过仓库调用方法 countStore.minus2(); } /script style/style2.6:pinia持久话因为页面刷新数据会丢失1:安装持久化插件npm install pinia-plugin-persistedstate2:main.ts 注册插件import piniaPluginPersistedstate from pinia-plugin-persistedstate const pinia createPinia() pinia.use(piniaPluginPersistedstate)3:仓库开启持久化export const usePersonStore defineStore(person, { state: () ({...}), getters:{}, actions:{}, persist: true // 开启持久化 })3:案例

相关新闻

芯片测试:从DFT设计到量产良率管理的系统工程实践

芯片测试:从DFT设计到量产良率管理的系统工程实践

1. 项目概述:从“测不准”到“测得准”的认知跃迁 “芯片测试问题”这六个字,对于任何一个身处半导体行业,尤其是设计、制造、封测环节的工程师来说,都足以引发一场头脑风暴。它不像“如何设计一个CPU”那样宏大叙事,也…

2026/10/17 5:27:56 阅读更多 →
和高人聊,从书上学,在事上练

和高人聊,从书上学,在事上练

天赋才能,被王兴排在人才成长的第一位。他曾这样描述自己的日常:“我的大部分时间还是用在读书、交流、思考、传播上。我需要确保对外界的认知具备较好的前瞻性,建立对过去、未来的认知框架。看书有利于建立宏观的框架,但是书的问…

2026/10/17 2:45:17 阅读更多 →
利用SharPersist与WMI事件订阅实现Windows隐蔽持久化攻防实战

利用SharPersist与WMI事件订阅实现Windows隐蔽持久化攻防实战

1. 项目概述:当“持久化”成为一场猫鼠游戏在攻防对抗的世界里,初始的漏洞利用或权限获取往往只是万里长征的第一步。真正的较量,始于攻击者能否在被发现和清除之前,在被攻陷的系统上牢牢地“扎根”。这个过程,我们称之…

2026/10/16 2:24:47 阅读更多 →

最新新闻

Claude代码模板:开箱即用的AI编程脚手架

Claude代码模板:开箱即用的AI编程脚手架

1. 这不是另一个“Claude CLI”:为什么 claude-code-templates 是开发者真正需要的脚手架 你有没有过这样的经历:刚想用 Claude 写一段 Python 数据清洗脚本,打开编辑器,光是搭环境就花了二十分钟——先查 pip install 还是 …

2026/10/17 5:27:25 阅读更多 →
H5扫码开发实战:jsQR与html5-qrcode选型、参数调优与避坑指南

H5扫码开发实战:jsQR与html5-qrcode选型、参数调优与避坑指南

简介:这是一份面向前端与跨端开发者的H5扫码功能实现资源,围绕jsQR与html5-qrcode两个JavaScript库展开,解决浏览器端无需安装插件即可读取二维码的问题,并兼顾uni-app在H5环境下的集成需求。资源包共43个文件,约488KB…

2026/10/17 5:27:25 阅读更多 →
WinDbg分析dump文件实战:从崩溃定位到托管内存排查

WinDbg分析dump文件实战:从崩溃定位到托管内存排查

前两天线上有个服务突然内存暴涨,同事用任务管理器抓了一个内存转储扔给我,丢下一句“帮我看看是不是泄漏”。我打开WinDbg加载这个.dmp文件,先敲了一条!analyze -v,然后盯着输出的栈回溯看了五分钟,发现根本不是托管内…

2026/10/17 5:27:25 阅读更多 →
JMX未授权访问漏洞自查与修复:四层防线加固指南

JMX未授权访问漏洞自查与修复:四层防线加固指南

Java的JMX(Java Management Extensions)作为运行期监控和管理的标准机制,几乎每个像样一点的Java服务都在用。但正因为太“标配”了,很多人只是随手在启动脚本里加了一行-Dcom.sun.management.jmxremote.port9010,却完…

2026/10/17 5:27:25 阅读更多 →
qui:把 3 台 qBittorrent 实例装进一个 WebUI 的实操笔记

qui:把 3 台 qBittorrent 实例装进一个 WebUI 的实操笔记

qui:把 3 台 qBittorrent 实例装进一个 WebUI 的实操笔记 【免费下载链接】qui A fast, single-binary qBittorrent web UI: manage multiple instances, automate torrent workflows, and cross-seed across trackers. 项目地址: https://gitcode.com/GitHub_Tre…

2026/10/17 5:27:25 阅读更多 →
SQL添加数据全攻略:INSERT、批量插入与冲突处理

SQL添加数据全攻略:INSERT、批量插入与冲突处理

前阵子有个小组的后台接口频繁报警,查了半天发现是日志表的数据写入方式太原始——一条一条循环INSERT,压测一上来直接拖垮了数据库连接池。那一刻我又想起刚学SQL时的自己:以为“添加数据”就是写一句INSERT INTO ... VALUES就完事了。实际上…

2026/10/17 5:26:25 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →