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

web vue之状态管理Pinia

一、Pinia 是什么?

Pinia 是 Vue 官方推荐的全新状态管理库(可看作 Vuex 的替代品),用于在多个组件间共享数据。
优点包括:

更简单的语法(无 mutations)

支持 TypeScript

响应式更强,性能更好

DevTools 支持出色

二、安装 Pinia

在一个 Vue 3 项目(例如用 Vite 创建的)中运行:

npm install pinia

如果你还没创建项目,可以先这样:

npm create vite@latest my-vue-app -- --template vue
cd my-vue-app
npm install
npm install pinia

三、在 main.js 中注册 Pinia

📄 src/main.js

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'const app = createApp(App)
const pinia = createPinia()app.use(pinia)
app.mount('#app')

四、创建一个 Store

📄 src/stores/counter.js

import { defineStore } from 'pinia'// 定义一个 counter store
export const useCounterStore = defineStore('counter', {state: () => ({count: 0,name: 'Victor'}),getters: {doubleCount: (state) => state.count * 2},actions: {increment() {this.count++},reset() {this.count = 0}}
})

五、在组件中使用 Store

📄 src/App.vue

<template><div style="padding: 20px"><h2>Pinia Demo</h2><p>Count: {{ counter.count }}</p><p>Double: {{ counter.doubleCount }}</p><button @click="counter.increment">➕ 加 1</button><button @click="counter.reset">🔄 重置</button><hr /><p>用户名: {{ counter.name }}</p><input v-model="counter.name" placeholder="修改用户名" /></div>
</template><script setup>
import { useCounterStore } from './stores/counter'const counter = useCounterStore()
</script><style>
button {margin-right: 8px;padding: 6px 12px;
}
</style>

六、运行项目

npm run dev

打开浏览器访问控制台提示的地址(默认是 http://localhost:5173/)即可看到效果
🎉

七、Pinia 一般使用场景

场景 示例
✅ 全局状态共享 比如保存登录用户信息、token、主题颜色等
✅ 多组件共享数据 父子组件或兄弟组件共享同一个状态
✅ 请求缓存 请求数据后缓存到 store,下次直接使用
✅ 复杂业务逻辑 将逻辑封装在 actions 里统一管理(类似 Vuex 的 actions)
✅ 组合多个 store 模块 可按业务功能拆分成多个 store 文件

八、扩展:组合多个 store 示例

// src/stores/user.js

export const useUserStore = defineStore('user', {state: () => ({ name: 'Guest', token: '' }),actions: {login(name) {this.name = namethis.token = 'mock-token'}}
})
```在组件中使用:
```typescript
<script setup>
import { useUserStore } from './stores/user'
const user = useUserStore()
user.login('Victor')
</script>
```
http://www.dtcms.com/a/487320.html

相关文章:

  • [Backstage] 前端扩展 | 应用扩展树 | 工厂函数 | attachTo附着点
  • 凡科网站案例网站备案好麻烦
  • ps做全屏网站画布要多大网络推广与传统推广的区别
  • 动易网站 首页模板修改智能科技网站模板
  • JVM 内存结构与 GC 机制详解( 实战优化版)
  • JVM垃圾收集器详解(jdk21+25实战版)
  • 花店网站建设规划书如何用易语言做网站辅助
  • 怎样做交互式网站网站建设的标语
  • 【iOS】KVC
  • 自己注册公司网站教育网站建设网站
  • 九度企业网站推广软件合肥网站建设工作
  • Beyond Vision (BV) -具有人工智能功能的全自动多旋翼无人机和混合垂直起降无人机
  • 做网站网络公司无收入阿里巴巴建站多少钱
  • 旅游网站对比模板下载08wordpress主题
  • HTTP之POST请求和GET请求
  • 聚类算法详解:k-means、层次聚类和DBSCAN
  • 廊坊中小企业网站制作做汽配找哪个网站好
  • 网站建设视频教程集工厂管理软件
  • Linux 学习笔记之 VI 编辑器与文件查找技巧
  • 贵阳网站建设多钱钱清远专业网站制作公司
  • 网站设计对网站搜索引擎友好性的影响南宁市两学一做网站
  • 什么是部署php网站邢台城乡建设局网站
  • 搜狐三季度营收多少新开网站seo
  • 基于 clangd 搭建 Redis 6.2 源码阅读与调试环境
  • 备案主体负责人 网站负责人哪个网站做ppt好
  • C文件中在编译时候怎么把几个同名函数链接进来
  • 影视 IP 全链开发:App 如何成为核心
  • 机房网络组建方案搜索引擎优化的核心是
  • CentOS7虚拟机扩容操作指南(CentOS7虚拟机磁盘大小不够)
  • Replication(下):事务,一致性与共识