news 2026/2/2 8:50:53

Vue——Vue3 + Vite 状态管理篇 之【Pinia 状态管理架构】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue——Vue3 + Vite 状态管理篇 之【Pinia 状态管理架构】

背景问题:
需要管理应用的全局状态。

方案思考:
使用 Pinia 作为状态管理工具。

具体实现:
创建 Pinia 实例:

// stores/index.jsimport{createPinia}from'pinia'constpinia=createPinia()exportdefaultpinia// main.jsimport{createApp}from'vue'importAppfrom'./App.vue'importpiniafrom'@/stores'constapp=createApp(App)app.use(pinia)app.mount('#app')

用户状态管理 Store 示例:

// stores/user.jsimport{defineStore}from'pinia'import{ref,computed}from'vue'exportconstuseUserStore=defineStore('user',()=>{// 定义状态constuserInfo=ref({})constisLoggedIn=ref(false)constpermissions=ref([])// 定义计算属性consthasPermission=computed(()=>{return(permission)=>{returnpermissions.value.includes(permission)}})// 定义动作constsetUser=(user)=>{userInfo.value=user isLoggedIn.value=!!user}constsetPermissions=(perms)=>{permissions.value=perms}constclearUser=()=>{userInfo.value={}isLoggedIn.value=falsepermissions.value=[]}constupdateProfile=(profile)=>{Object.assign(userInfo.value,profile)}return{// 状态userInfo,isLoggedIn,permissions,// 计算属性hasPermission,// 动作setUser,setPermissions,clearUser,updateProfile}})

在组件中使用 Store 的示例:

<template> <div class="user-profile"> <h2>用户信息</h2> <p>姓名: {{ userStore.userInfo.name }}</p> <p>邮箱: {{ userStore.userInfo.email }}</p> <p>状态: {{ userStore.isLoggedIn ? '已登录' : '未登录' }}</p> <div v-if="userStore.hasPermission('user.edit')"> <el-button @click="editProfile">编辑资料</el-button> </div> <div v-else> <p>您没有编辑权限</p> </div> <el-button @click="logout" type="danger">退出登录</el-button> </div> </template> <script setup> import { useUserStore } from '@/stores/user' const userStore = useUserStore() const editProfile = () => { console.log('编辑用户资料') // 编辑逻辑 } const logout = () => { userStore.clearUser() console.log('用户已退出') } </script>

应用状态管理 Store 示例:

// stores/app.jsimport{defineStore}from'pinia'import{ref}from'vue'exportconstuseAppStore=defineStore('app',()=>{// 侧边栏状态constsidebar=ref({opened:true,withoutAnimation:false})// 设备类型constdevice=ref('desktop')// 全屏状态constfullscreen=ref(false)// 切换侧边栏consttoggleSidebar=(withoutAnimation)=>{sidebar.value.opened=!sidebar.value.opened sidebar.value.withoutAnimation=withoutAnimation}// 关闭侧边栏constcloseSidebar=(withoutAnimation)=>{sidebar.value.opened=falsesidebar.value.withoutAnimation=withoutAnimation}// 切换设备consttoggleDevice=(deviceType)=>{device.value=deviceType}// 切换全屏consttoggleFullscreen=()=>{if(!document.fullscreenElement){document.documentElement.requestFullscreen()fullscreen.value=true}else{if(document.exitFullscreen){document.exitFullscreen()fullscreen.value=false}}}return{sidebar,device,fullscreen,toggleSidebar,closeSidebar,toggleDevice,toggleFullscreen}})
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/28 12:09:02

OpCore Simplify终极指南:零基础搭建稳定黑苹果系统

OpCore Simplify终极指南&#xff1a;零基础搭建稳定黑苹果系统 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经被复杂的命令行配置吓退&am…

作者头像 李华
网站建设 2026/1/27 1:50:03

Blender MMD Tools终极指南:从零到精通的完整实操手册

Blender MMD Tools终极指南&#xff1a;从零到精通的完整实操手册 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools 想…

作者头像 李华
网站建设 2026/1/28 14:22:31

MediaPipe Holistic性能测试:不同硬件配置下的表现对比

MediaPipe Holistic性能测试&#xff1a;不同硬件配置下的表现对比 1. 引言 1.1 AI 全身全息感知的技术背景 随着虚拟现实、数字人和智能交互系统的快速发展&#xff0c;对全维度人体动作捕捉的需求日益增长。传统方案往往依赖多模型串联或高成本动捕设备&#xff0c;存在延…

作者头像 李华
网站建设 2026/1/31 5:59:24

纪念币预约终极指南:3步实现自动化抢购的简单方法

纪念币预约终极指南&#xff1a;3步实现自动化抢购的简单方法 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 还在为每次纪念币预约都手忙脚乱而烦恼吗&#xff1f;纪念币预约自动化…

作者头像 李华
网站建设 2026/1/28 12:16:42

IndexTTS2实测报告:V23情感控制效果远超预期

IndexTTS2实测报告&#xff1a;V23情感控制效果远超预期 在语音合成&#xff08;Text-to-Speech, TTS&#xff09;技术快速演进的今天&#xff0c;用户对“拟人化”表达的需求已从可有可无变为刚性标准。传统的中性语调、机械停顿早已无法满足智能客服、虚拟主播、有声内容创作…

作者头像 李华
网站建设 2026/1/25 16:13:30

XNB文件处理终极指南:xnbcli工具全面解析

XNB文件处理终极指南&#xff1a;xnbcli工具全面解析 【免费下载链接】xnbcli A CLI tool for XNB packing/unpacking purpose built for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/xn/xnbcli 让我们一起探索XNB文件的神秘世界&#xff0c;发现如何通过…

作者头像 李华