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

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}})
http://www.cnnetsun.cn/news/604773.html

相关文章:

  • OpCore Simplify终极指南:零基础搭建稳定黑苹果系统
  • Blender MMD Tools终极指南:从零到精通的完整实操手册
  • MediaPipe Holistic性能测试:不同硬件配置下的表现对比
  • 纪念币预约终极指南:3步实现自动化抢购的简单方法
  • IndexTTS2实测报告:V23情感控制效果远超预期
  • XNB文件处理终极指南:xnbcli工具全面解析
  • Holistic Tracking技术揭秘:多目标跟踪实现方案
  • League Akari:重新定义英雄联盟游戏体验的智能革命
  • Python自动化纪念币预约工具的高效应用指南
  • 零基础教程:用Super Resolution镜像3倍放大低清图片
  • 零基础玩转AI读脸术:用OpenCV镜像快速搭建人脸分析系统
  • 5个步骤轻松实现纪念币自动预约:告别手速焦虑
  • G-Helper终极指南:如何用轻量工具完美掌控华硕ROG笔记本性能
  • ......
  • 显存不足怎么办?IndexTTS2低资源运行技巧
  • AI修复老照片避坑指南:Super Resolutio镜像常见问题全解
  • 如何快速掌握LeagueAkari:英雄联盟智能辅助工具的完整使用指南
  • 5分钟搞定英雄联盟智能助手:从菜鸟到大神的终极指南
  • 隐私合规数据匿名化验证:测试工程师的实战框架
  • 智能路由系统故障自愈测试:软件测试从业者的实战指南
  • LeaguePrank终极指南:安全打造个性化英雄联盟体验
  • AR滤镜开发利器:Holistic Tracking面部网格应用案例
  • DownKyi完整教程:5步轻松掌握B站视频下载技巧
  • GHelper如何让华硕笔记本性能提升200%?专业工程师深度解析
  • 终极指南:5步掌握OpCore Simplify自动化配置
  • 零基础教程:用Super Resolution镜像一键修复模糊照片
  • League Akari完整指南:英雄联盟玩家的终极智能伴侣
  • 终极英雄联盟美化神器LeaguePrank完整使用指南 - 免费个性化你的游戏形象
  • 英雄联盟美化完全指南:安全个性化你的游戏界面
  • 纪念币预约神器:一键提升预约成功率的高效工具