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

全面解析uni-app全局状态管理:Vuex与Pinia实战

大家好今天我们来聊聊在uni-app开发中一个绕不开的话题——全局状态管理。无论是用户信息、购物车数据还是主题设置一个优秀的状态管理方案能让你的应用逻辑更清晰、维护更轻松。这篇文章会从Vuex和Pinia两个主流方案入手带大家全面了解如何在uni-app中优雅地管理全局状态。一、为什么需要全局状态管理在复杂的uni-app项目中我们经常会遇到多个页面、多个组件之间共享数据的场景。如果仅仅依靠页面传参或者事件总线Event Bus会导致数据流混乱数据传来传去难以追踪状态的变更源头。组件耦合度高组件之间直接依赖复用性变差。“状态地狱”深层嵌套的组件传递状态代码会变得异常繁琐。全局状态管理库将所有共享状态抽离到一个全局的“仓库”Store中任何组件都可以直接从中读取或修改状态实现了数据的集中管理和响应式更新。二、Vuex经典永不过时Vuex是Vue官方的状态管理库成熟稳定生态完善在uni-appVue 2项目中是首选方案。1. 安装与配置首先在项目根目录下安装Vuexnpm install vuex3 --save然后在项目main.js同级目录下创建store/index.js文件import Vue fromvue import Vuex fromvuex Vue.use(Vuex) const store new Vuex.Store({ state: { // 存放全局状态 userInfo: null, token: uni.getStorageSync(token) || }, mutations: { // 同步修改state的唯一方法 SET_USER_INFO(state, payload) { state.userInfo payload }, SET_TOKEN(state, payload) { state.token payload uni.setStorageSync(token, payload) } }, actions: { // 处理异步操作 async login({ commit }, credentials) { // 模拟API请求 const response awaitnewPromise(resolve { setTimeout(() { resolve({ code: 0, data: { user: { name: uni-app-user, id: 1 }, token: fake-jwt-token-string } }) }, 500) }) if (response.code 0) { commit(SET_USER_INFO, response.data.user) commit(SET_TOKEN, response.data.token) returntrue } returnfalse } }, getters: { // state的计算属性 isLoggedIn: state !!state.token, userName: state state.userInfo ? state.userInfo.name : 游客 } }) exportdefault store最后在main.js中挂载Storeimport store from ./store const app new Vue({ store, ...App }) app.$mount()2. 在页面中使用在页面或组件中我们可以通过this.$store或者mapState、mapMutations等辅助函数来访问Store。template view text用户{{ userName }}/text button v-if!isLoggedIn clickhandleLogin登录/button /view /template script import { mapGetters, mapActions } from vuex export default { computed: { ...mapGetters([isLoggedIn, userName]) }, methods: { ...mapActions([login]), async handleLogin() { const success await this.login({ username: test, password: 123 }); if (success) { uni.showToast({ title: 登录成功 }); } } } } /script三、Pinia更轻量、更现代的选择Pinia是Vue官方推荐的下一代状态管理库它设计更简洁对TypeScript支持更友好并且在uni-appVue 3项目中表现出色。1. 安装与配置首先安装Pinianpm install pinia在main.js中引入并使用Piniaimport { createSSRApp } fromvue import { createPinia } frompinia import App from./App.vue exportfunction createApp() { const app createSSRApp(App) app.use(createPinia()) return { app } }接着创建你的Store文件例如store/user.jsimport { defineStore } frompinia exportconst useUserStore defineStore(user, { state: () ({ userInfo: null, token: uni.getStorageSync(token) || , }), getters: { isLoggedIn: (state) !!state.token, userName: (state) state.userInfo ? state.userInfo.name : 游客, }, actions: { async login(credentials) { // 模拟异步API请求 const response awaitnewPromise(resolve { setTimeout(() { resolve({ code: 0, data: { user: { name: uni-app-user, id: 1 }, token: fake-jwt-token-string-pinia } }) }, 500) }) if (response.code 0) { this.userInfo response.data.user this.token response.data.token uni.setStorageSync(token, this.token) returntrue } returnfalse }, logout() { this.userInfo null this.token uni.removeStorageSync(token) } }, })2. 在页面中使用Pinia的使用方式更加直观和简单。template view text用户{{ userStore.userName }}/text button v-if!userStore.isLoggedIn clickhandleLogin登录/button /view /template script setup import { useUserStore } from /store/user const userStore useUserStore() const handleLogin async () { const success await userStore.login({ username: test, password: 123 }); if (success) { uni.showToast({ title: 登录成功 }); } } /script四、实战经验总结 案例用户登录状态持久化背景用户登录后即使关闭小程序或App下次打开时仍应保持登录状态。问题Store中的数据是内存中的刷新后会丢失。解决方案Vuex在SET_TOKENmutation中同步使用uni.setStorageSync将token存入本地缓存。初始化state时从uni.getStorageSync读取。Pinia同样在loginaction中获取到token后立即调用uni.setStorageSync。初始化state时直接从缓存读取。结果实现了登录状态的持久化。踩坑记录不要在action之外的地方修改本地缓存保证状态的唯一数据源是Store。五、常见问题解答Q1Vuex和Pinia应该怎么选A如果你的项目是基于Vue 2的uni-app建议使用Vuex 3。如果是Vue 3强烈推荐使用Pinia它的API更简洁类型推断更完善。Q2状态很多Store文件会不会变得很大A会的。Vuex和Pinia都支持模块化Modules你可以将不同业务模块的状态拆分到不同的文件中使代码结构更清晰。六、注意事项⚠️安全不要在前端Store中存储任何敏感信息如密码、密钥等。⚠️命名保持mutationsVuex和actionsPinia的命名清晰、规范便于调试和追踪。⚠️性能对于非响应式或非常大的数据避免直接放入state以免造成不必要的性能开销。写在最后无论是Vuex还是Pinia它们的核心思想都是将共享状态集中管理让数据流变得可预测。掌握了它们你就能更从容地应对复杂的uni-app应用开发。建议先收藏再根据你的项目技术栈选择一个深入实践。

相关文章:

全面解析uni-app全局状态管理:Vuex与Pinia实战

大家好,今天我们来聊聊在uni-app开发中一个绕不开的话题——全局状态管理。无论是用户信息、购物车数据,还是主题设置,一个优秀的状态管理方案能让你的应用逻辑更清晰、维护更轻松。这篇文章会从Vuex和Pinia两个主流方案入手,带大…...

SQLAdmin:如何为FastAPI项目快速构建专业级数据库管理后台?

SQLAdmin:如何为FastAPI项目快速构建专业级数据库管理后台? 【免费下载链接】sqladmin SQLAlchemy Admin for FastAPI and Starlette 项目地址: https://gitcode.com/gh_mirrors/sq/sqladmin 在构建现代Web应用时,开发团队经常面临一个…...

PAT/PTA刷题实战:L1-027‘出租’题的三种解法与效率对比(C语言实现)

L1-027‘出租’题的三种解法与效率对比(C语言实现) 当你面对PTA题库中的L1-027题时,是否曾思考过如何用更高效的方式解决这个看似简单的电话号码转换问题?本文将带你深入探讨三种不同的C语言实现方案,从基础的冒泡排序…...

告别卡顿!用Arduino+GRBL玩转激光雕刻,详解速度前瞻如何提升雕刻精度

告别卡顿!用ArduinoGRBL玩转激光雕刻,详解速度前瞻如何提升雕刻精度 激光雕刻机在DIY圈子里越来越火,但很多玩家都遇到过这样的尴尬:雕刻直线时光滑流畅,一到拐角就出现烧焦、停顿甚至错位。上周我的工作室接了个定制木…...

开源语音识别模型对比:SenseVoice-Small vs Whisper-Large性能与部署实测

开源语音识别模型对比:SenseVoice-Small vs Whisper-Large性能与部署实测 1. 引言:为什么需要对比语音识别模型? 语音识别技术已经成为人机交互的重要桥梁,从智能助手到会议转录,从客服系统到内容创作,无…...

避坑指南:ENSP防火墙策略配置常见错误与排查思路(附Web界面操作截图)

ENSP防火墙策略配置深度排错手册:从原理到实战的完整解决方案 当你在ENSP模拟环境中配置防火墙策略时,是否遇到过这样的场景:所有配置步骤看似正确,但流量就是无法通过?或者策略时灵时不灵,找不到规律&…...

别再死记硬背了!用这3个真实项目案例(储蓄/机票/监护系统)搞定软件工程数据流图

别再死记硬背了!用这3个真实项目案例搞定软件工程数据流图 刚接触软件工程时,你是否也对着课本上那些抽象的数据流图符号发愁?矩形、圆圈、箭头…这些看似简单的图形组合,在实际绘制时却总让人无从下手。更头疼的是考试中那些综合…...

为什么你的模型在STM32H7上崩溃了?——揭秘C语言ABI对齐、const段重定位与Flash执行冲突的3重隐性杀手

第一章:嵌入式C语言与轻量级大模型适配的底层约束全景图嵌入式系统资源受限的本质,决定了其与大模型技术融合并非简单移植,而是一场对内存、算力、确定性与工具链的系统性再平衡。C语言作为嵌入式开发的基石,在对接轻量级大模型&a…...

使用零刻mini主机/群晖/Macmini 用docker部署OpenClaw喂饭级踩坑详细教程|以及多用户多Agent对接

群晖的部署遇到挺多问题的整理下给大家一个喂饭部署教程以及一些遇到的问题总结,都是这段时间一点一点部署修改得出来的一些经验,目前整理了群晖和Mac部署的,以后有零刻再更新做零刻的部署方法 黑群晖/群晖部署 先下载文件 拉取文件 先进入s…...

SAP SD VL31N创建内向交货单,BAPI调用物料号丢失?一个隐式增强搞定

SAP SD VL31N创建内向交货单:BAPI调用物料号丢失的深度排查与隐式增强实战 最近在实施一个SAP SD模块的采购订单对接项目时,遇到了一个颇为棘手的问题:通过标准BAPI BBP_INB_DELIVERY_CREATE创建内向交货单时,物料号在传输过程中神…...

【深度解析】AUTOSAR EcuM:从启动到休眠的ECU状态管理核心

1. AUTOSAR EcuM模块的核心价值与定位 想象一下你正在驾驶一辆现代汽车,当你转动钥匙启动引擎时,仪表盘上的各种指示灯依次亮起,中控屏幕缓缓启动,空调系统开始工作——这一系列看似简单的动作背后,其实隐藏着一个复杂…...

如何利用AI Agent自动分析Linux BSP(Board Support Package)驱动和内核日志

利用AI Agent自动分析Linux BSP(Board Support Package)驱动和内核日志,是当前嵌入式开发和系统调优领域非常前沿且高回报的尝试。传统的内核调试(如排查 Kernel Panic、Oops、内存泄漏)高度依赖资深工程师的经验&…...

【仅限首批读者】Docker 27.1新增image convert命令实测报告:x86_64镜像秒级转arm64,无需重建层,性能提升92%(附压测数据)

第一章:Docker 27 跨架构镜像转换工具概览 Docker 27 引入了原生增强的跨架构镜像构建与转换能力,其核心依托于 docker buildx 的深度集成与 containerd 1.7 对多平台运行时的支持。相比早期需依赖 QEMU 模拟或手动交叉编译的方式,Docker 2…...

GraalVM原生镜像编译:探索Java应用的新编译路径

GraalVM原生镜像编译:探索Java应用的新编译路径 在Java生态系统中,编译与部署一直是开发者关注的重点。传统的Java应用依赖于JVM(Java虚拟机)来运行,这虽然提供了跨平台的便利性,但也带来了启动延迟和较高的…...

Java NIO.2 文件系统:探索高效文件操作的新维度

Java NIO.2 文件系统:探索高效文件操作的新维度 在Java编程的世界里,文件操作一直是开发者们频繁接触且至关重要的部分。随着Java版本的演进,Java NIO(New I/O)的引入为文件处理带来了革命性的变化,而Java …...

VSCode 2026协作增强实操手册:3步启用端到端加密会话、7种角色权限模板、21个企业合规审计要点

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026实时协作增强概览 VSCode 2026 引入了深度集成的实时协作引擎(LiveSync Core),基于 WebRTC 与 CRDT(冲突无关复制数据类型)双协议…...

【YOLOv11】035、YOLOv11在移动端部署:NCNN与MNN实战踩坑笔记

一、从真机闪退开始说起 上周三深夜,测试同事扔过来一台Android设备,屏幕上赫然是熟悉的“App has stopped”。日志里只有一行模糊的memory allocation failure,但PC端模拟器明明跑得顺畅。这就是移动端部署的典型开场——模型在服务器上精度再高,到了真机上可能就是另一回…...

维谛ER4830/S整流模块用户手册

‌ER4830/S‌ 是一款由艾默生(EMERSON)生产的通信电源整流模块,广泛应用于电力、通信、工业等领域,主要用于将交流电转换为稳定的48V直流电,为通信设备、变电站二次回路、控制信号系统等提供可靠电源。 主要技术参数: ‌输出电压‌:DC 48V ‌额定输出电流‌:30A ‌最大…...

不只是Ping:深入理解Pingtunnel如何把TCP流量“藏”在ICMP包里

穿透防火墙的隐形通道:ICMP隧道技术深度解析 当企业防火墙严格限制TCP/UDP流量时,网络管理员常会保留ICMP协议的通行权限——毕竟ping命令是网络诊断的基础工具。正是这种"必要的仁慈",催生了一种巧妙的数据传输技术:将…...

别再死记硬背LSTM公式了!用PyTorch手写一个LSTM单元,5分钟搞懂门控机制

从零实现LSTM单元:用PyTorch代码拆解门控机制 当你第一次看到LSTM那一堆复杂的公式时,是不是感觉头大?遗忘门、输入门、输出门、细胞状态...这些概念听起来高大上,但真正动手写代码时却不知从何下手。今天我们就用PyTorch从零开始…...

【YOLOv11】034、YOLOv11在边缘设备部署:使用TensorRT加速NVIDIA Jetson平台

深夜的调试日志:当YOLOv11遇上Jetson Nano 上周三凌晨两点,实验室的Jetson Nano风扇还在嘶吼。屏幕上显示着YOLOv11的检测帧率:3.2 FPS。这个数字让人清醒——项目要求的实时检测是25 FPS。原生的PyTorch模型在边缘设备上的无力感,在这个深夜格外清晰。这不是算法问题,是…...

从FHSS到OFDMA:Wi-Fi协议演进中的核心技术变革

1. Wi-Fi协议演进简史:从"慢车道"到"信息高速公路" 1997年,当IEEE首次发布802.11标准时,最高2Mbps的传输速率在今天看来简直像蜗牛爬行。记得我第一次接触早期Wi-Fi时,下载一首MP3歌曲需要等待近10分钟&#…...

SQL注入靶场23-37关实战通关攻略

本文将展示sql注入靶场23-37关的通关思路 第二十三关(GET - 报错注入:过滤注释符,用引号闭合) 进入第二十三关发现又回到了GET参数,但是有区别,这关将#和-- qwe等等注释符加入了黑名单,屏蔽掉…...

ABAP批量导入Excel数据实战:从文件选择到数据库插入的完整流程

ABAP高效Excel数据导入:从基础实现到性能优化的完整指南 在企业级SAP系统开发中,Excel数据批量导入是每个ABAP开发者必须掌握的技能。无论是期初数据加载、日常业务数据维护,还是系统间数据交换,高效可靠的数据导入机制都能显著提…...

AI投毒情报预警 | Xinference国产推理框架遭受供应链窃密后门投毒

风险概述 北京时间4月22日16点,悬镜AI安全情报中心在Pypi官方仓库中监测到国产热门开源AI模型推理框架 Xinference 短时间内连续发布2.6.0、2.6.1及2.6.2三个版本更新,并且在这三个新版本框架源码中都检出混淆代码及高风险恶意行为。在混淆恶意代码中发现…...

NHSE:动物森友会存档编辑工具全面指南

NHSE:动物森友会存档编辑工具全面指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否厌倦了在《集合啦!动物森友会》中反复刷资源、等待稀有村民出现?想…...

Cursor 官宣AI新玩具:Canvas

推荐阅读 IDEA 官宣:终于可以爽用Cursor了! 重磅!前端再次被碾压,比 Cursor 更强的 AI 工具发布了! Cursor 3.1 发布:VS Code 那一套要失效了吗? 💡 前言:以前和 A…...

安全编程实践常见漏洞与防范措施

在数字化时代,软件安全已成为开发过程中不可忽视的核心问题。安全编程实践旨在通过规范代码编写方式,预防潜在漏洞,降低被攻击风险。由于开发者的疏忽或知识盲区,常见漏洞如注入攻击、缓冲区溢出等仍频繁出现。本文将聚焦三类典型…...

从malloc到memsafe_c:2026规范强制要求的4类API替换清单,不改业务逻辑也能通过ISO/IEC 17961合规审计

第一章:现代 C 语言内存安全编码规范 2026 成本控制策略在嵌入式系统、操作系统内核与高性能服务开发中,C 语言仍占据不可替代地位,但传统内存操作(如裸指针算术、未校验的 malloc 返回值、strcpy 类危险函数)已成为安…...

Linux文件系统(一):从磁盘结构到文件系统基础

目录 一、计算机存储体系 1. 从计算机到磁盘 2. 什么是磁盘 二、磁盘的物理结构 1. 磁盘组成 2. 数据写入原理 三、磁盘的存储结构 1. 扇区、磁道、柱面 2. 磁盘与数组 单磁道展开 同半径磁道展开 全盘展开 C / C 数组思维的线性化 四、磁盘寻址方式 1. CHS 寻址…...