Pinia 状态管理
第10课 Pinia 状态管理理解为什么需要 Pinia跨组件共享状态掌握 store 的 state / getters / actions 三件套在组件中正确读写 store含storeToRefs的作用结合 localStorage 实现登录状态持久化Pinia官网Pinia | The intuitive store for Vue.js1. 为什么需要 Pinia1.1 props / emit 的局限父子组件逐层传递数据中间组件被迫当“传声筒”跨页面、跨层级共享数据十分麻烦。1.2 Pinia 的作用全局共享状态任意组件直接读写无需层层传递状态变化自动通知所有使用方响应式官方出品与 Vue3 完美配合1.3 什么数据适合放 store多个组件都要用到数据会发生变化例当前登录用户、购物车、主题色、权限信息组件内部用完即丢的数据留在组件自己的ref/reactive里不要什么都丢进 store。2. Store 三件套state / getters / actions成员职责类比对应 Vue 知识state存储数据储物柜的柜体ref/reactivegetters根据 state 计算派生数据有缓存取件窗口现用现算computedactions修改数据支持异步、调用其它 action业务柜台办手续methods写法规则state必须是函数返回对象避免多个实例共享同一对象getters接收state作为参数箭头函数actions用普通函数内部通过this访问 state 和其它 action3. 安装与注册npminstallpinia在main.js中注册import{createApp}fromvueimport{createPinia}frompinia// 1. 引入importAppfrom./App.vueconstappcreateApp(App)app.use(createPinia())// 2. 注册一定要在用 store 之前app.mount(#app)4. 创建第一个 store计数器示例文件src/stores/counter.jsimport{defineStore}frompiniaexportconstuseCounterStoredefineStore(counter,{state:()({count:0}),getters:{doubleCount:(state)state.count*2},actions:{increment(){this.count// 用 this 访问 state},addBy(step){this.countstep}}})defineStore第一个参数是 store 的唯一 ID全项目不可重复。5. 在组件中使用 store5.1 基本读写script setup import { storeToRefs } from pinia import { useCounterStore } from ../stores/counter const counterStore useCounterStore() // 获取 store 实例 // 解构 state/getters 并保持响应式 const { count, doubleCount } storeToRefs(counterStore) // actions 可直接解构函数没有响应式丢失问题 const { increment } counterStore function handleAdd() { counterStore.increment() // 调用 action 修改 } /script template p{{ count }}/p p{{ doubleCount }}/p button clickhandleAdd1/button /template5.2 直接解构 vsstoreToRefs直接解构(const { count } counterStore)数据会丢失响应式因为 store 内部用了reactive直接解构会断开响应式连接storeToRefs解构出来的每个值都是ref保持响应式模板中自动解包脚本中需.valueactions 可以直接解构函数没有响应式问题5.3 修改数据的两种姿势直接修改store.count适合简单操作通过 actionstore.increment()有业务逻辑、需要校验或组合多个字段时推荐6. 实战登录状态管理核心案例6.1 创建用户 Store (src/stores/user.js)import{defineStore}frompinia// localStorage 键名统一管理避免拼写错误constSTORAGE_KEYadmin_user// 从 localStorage 恢复登录状态functionloadUserFromStorage(){try{constsavedlocalStorage.getItem(STORAGE_KEY)returnsaved?JSON.parse(saved):null}catch{returnnull// 数据损坏时按未登录处理不崩溃}}exportconstuseUserStoredefineStore(user,{state:()({userInfo:loadUserFromStorage()// 初始化时自动恢复}),getters:{isLoggedIn:(state)state.userInfo!null,displayName:(state){if(!state.userInfo)return未登录return${state.userInfo.name}${state.userInfo.role}}},actions:{// 登录保存用户信息到 state同时写入 localStoragelogin(userInfo){this.userInfouserInfo localStorage.setItem(STORAGE_KEY,JSON.stringify(userInfo))},// 退出清空 state同时删除 localStoragelogout(){this.userInfonulllocalStorage.removeItem(STORAGE_KEY)}}})6.2 登录页改造 (LoginView.vue)import{useUserStore}from../stores/userconstuserStoreuseUserStore()// 登录成功时调用userStore.login({name:loginForm.username,role:管理员,loginTime:newDate().toLocaleString()})router.replace({name:dashboard})6.3 主布局顶部栏显示登录用户 (MainLayout.vue)script setup import { useUserStore } from ../stores/user const userStore useUserStore() function handleLogout() { userStore.logout() router.replace({ name: login }) } /script template span你好{{ userStore.displayName }}/span button clickhandleLogout退出登录/button /template6.4 路由守卫改造 (router/index.js)import{useUserStore}from../stores/userrouter.beforeEach((to,from,next){// 必须在守卫回调内部调用 useUserStore()此时 Pinia 已激活constuserStoreuseUserStore()if(to.path!/login!userStore.isLoggedIn){next({name:login})}else{next()}})7. 持久化三句话localStorage 配合时机操作代码位置登录时写入localStorage.setItemloginaction初始化时恢复localStorage.getItemstate初始化函数退出时清除localStorage.removeItemlogoutaction三个容易踩的坑对象必须JSON.stringify写入JSON.parse读出解析存档时用try/catch防止数据损坏导致页面崩溃退出时 store 和 localStorage两处同时清空否则刷新会“死而复生”8. 常见错误排查现象原因解决getActivePinia was called with no active Pinia忘记app.use(createPinia())在main.js中注册解构的 state 值不更新直接解构 store使用storeToRefs()actions 中this是 undefinedactions 写成箭头函数actions 必须用普通函数state 写成对象而非函数state: { count: 0 }改为state: () ({ count: 0 })路由守卫报 store 相关错误在文件顶层调用了useXxxStore()移到beforeEach回调内部退出后刷新又回到后台只清了 store 没清 localStoragelogout 中同时removeItem刷新后页面崩溃/白屏localStorage 数据损坏JSON.parse抛异常恢复函数加try/catch总结Pinia 全局公告栏任意组件读写共享数据无需 props 传递Store 三件套state 存、getters 算、actions 改组件使用useXxxStore()获取实例storeToRefs保持响应式解构持久化登录写入 → 初始化恢复 → 退出清除三句话守卫升级从localStorage.isLogin升级为store.isLoggedIn数据更完整

相关新闻

犬主动脉平滑肌细胞(ASMC)原代细胞介绍

犬主动脉平滑肌细胞(ASMC)原代细胞介绍

犬主动脉平滑肌细胞(Canine Aortic Smooth Muscle Cells, ASMC)是从健康犬主动脉血管中膜层分离提取的原代细胞,是心血管生物学、血管病理机制、兽药药理及血管工程研究的核心体外实验模型。该细胞严格保留犬源血管平滑肌细胞最原始的生物学特…

2026/8/11 11:10:04 阅读更多 →
以牌会友智竞交锋|第16期田与家掼蛋比赛暨百年建台·田与家紫桐杯盛大开赛

以牌会友智竞交锋|第16期田与家掼蛋比赛暨百年建台·田与家紫桐杯盛大开赛

2026年8月8日,第16期田与家掼蛋比赛暨百年建台田与家紫桐杯,在百年建台掼蛋俱乐部正式拉开战幕。本次赛事由田与家、紫桐冰酒、百年建台三方联合举办,汇聚众多掼蛋运动爱好者,以智力竞技为纽带,融合商务社交、文化交流…

2026/8/11 11:10:04 阅读更多 →
SpringBoot+Flowable 流程任务操作全景:通过拒绝转办委派加签退回抄送异同,与 operation-button 封装落地

SpringBoot+Flowable 流程任务操作全景:通过拒绝转办委派加签退回抄送异同,与 operation-button 封装落地

SpringBootFlowable 流程任务操作全景:通过拒绝转办委派加签退回抄送异同,与 operation-button 封装落地 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCod…

2026/8/11 11:10:04 阅读更多 →

最新新闻

储能行业出海战略与技术创新解析

储能行业出海战略与技术创新解析

1. 储能行业出海战略解析 上能电气2025年财报中,储能业务海外市场表现尤为亮眼。作为国内最早布局海外储能市场的企业之一,公司通过"产品服务本地化"三位一体策略,在欧洲、北美和亚太三大区域市场实现了突破性增长。 1.1 海外市场…

2026/8/11 11:49:22 阅读更多 →
Python-for-Android:用Python代码构建原生Android应用的革命性工具

Python-for-Android:用Python代码构建原生Android应用的革命性工具

Python-for-Android:用Python代码构建原生Android应用的革命性工具 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android 想象一下,你是一名…

2026/8/11 11:49:22 阅读更多 →
构建自改进RLM智能体:突破AI编程从单次应答到持续自治的瓶颈

构建自改进RLM智能体:突破AI编程从单次应答到持续自治的瓶颈

如果你是一位开发者,最近可能已经感受到了AI编程助手带来的效率提升。从简单的代码补全到复杂的函数生成,工具确实帮我们节省了不少时间。但你是否遇到过这样的困境:面对一个需要多步骤、长时间运行的复杂开发任务,比如重构一个模…

2026/8/11 11:49:22 阅读更多 →
ZXP安装器终极指南:3分钟搞定Adobe插件安装的免费神器

ZXP安装器终极指南:3分钟搞定Adobe插件安装的免费神器

ZXP安装器终极指南:3分钟搞定Adobe插件安装的免费神器 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 还在为Adobe插件的安装流程感到头痛吗?每次面对…

2026/8/11 11:49:22 阅读更多 →
题解:洛谷 P1744 采购特价商品

题解:洛谷 P1744 采购特价商品

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

2026/8/11 11:49:22 阅读更多 →
木马与蠕虫:数字世界的特洛伊木马与不死毒蛇

木马与蠕虫:数字世界的特洛伊木马与不死毒蛇

🔒 木马与蠕虫:数字世界的特洛伊木马与不死毒蛇紫禁玄科 | 2026年8月10日📌 导读:从2000年横扫全球的"ILOVEYOU"情书蠕虫,到至今仍在暗网活跃的Emotet僵尸网络,木马病毒与蠕虫病毒已造成超过数千…

2026/8/11 11:48:21 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →