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

pinia快速入门

Pinia 是 Vue.js 的官方状态管理库,它提供了直观且类型安全的方式来管理应用状态。下面为你提供一个快速入门指南:

1. 安装 Pinia

首先,确保你已经安装了 Vue 3 项目,然后通过 npm 或 yarn 安装 Pinia:

npm install pinia
# 或
yarn add pinia

2. 创建并配置 Pinia 实例

在你的 Vue 项目中,创建一个 Pinia 实例并在应用中注册:

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

3. 创建第一个 Store

Store 是 Pinia 中的核心概念,类似于 Vuex 中的 store。下面创建一个简单的 counter store:

import { defineStore } from 'pinia'// 使用组合式 API 风格创建 store
export const useCounterStore = defineStore('counter', () => {// 状态const count = ref(0)// 获取器 (getters)const doubleCount = computed(() => count.value * 2)// 动作 (actions)function increment() {count.value++}function incrementBy(value) {count.value += value}// 返回所有状态和方法return { count, doubleCount, increment, incrementBy }
})// 也可以使用选项式 API 风格 (与 Vue 2 兼容)
// export const useCounterStore = defineStore('counter', {
//   state: () => ({
//     count: 0
//   }),
//   getters: {
//     doubleCount: (state) => state.count * 2
//   },
//   actions: {
//     increment() {
//       this.count++
//     }
//   }
// })

4. 在组件中使用 Store

创建好 store 后,可以在任何组件中使用它:

<template><div><p>Count: {{ counter.count }}</p><p>Double Count: {{ counter.doubleCount }}</p><button @click="counter.increment">+</button><button @click="counter.incrementBy(5)">+5</button></div>
</template><script setup>
import { useCounterStore } from '../stores/counter'// 获取 store 实例
const counter = useCounterStore()// 也可以解构 store 中的属性
// const { count, increment } = useCounterStore()
// 注意:直接解构会失去响应性,需要使用 storeToRefs
// import { storeToRefs } from 'pinia'
// const { count } = storeToRefs(useCounterStore())
</script>

5. Store 特性详解

状态管理

Pinia 的状态是响应式的,可以直接修改:

// 在 store 中
const count = ref(0)
count.value++// 或在 actions 中
function increment() {count.value++
}
Getters (获取器)

类似于计算属性,用于派生状态:

const doubleCount = computed(() => count.value * 2)
Actions (动作)

用于处理逻辑和修改状态:

function increment() {count.value++
}// 异步操作
async function fetchData() {const response = await fetch('https://api.example.com/data')const data = await response.json()// 更新状态
}

6. 插件和持久化

Pinia 支持插件扩展,可以添加如持久化等功能:

import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)export default pinia

然后在 store 中启用持久化:

export const useCounterStore = defineStore('counter', () => {// 状态定义...
}, {persist: true // 启用持久化// 或自定义配置// persist: {//   key: 'my-custom-key',//   storage: localStorage,//   paths: ['count'] // 只持久化 count 字段// }
})

7. 类型安全

Pinia 对 TypeScript 提供了一流的支持:

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'export const useUserStore = defineStore('user', () => {// 明确类型定义const user = ref<User | null>(null)function setUser(newUser: User) {user.value = newUser}return { user, setUser }
})interface User {id: numbername: stringemail: string
}

总结

Pinia 是 Vue 3 的官方状态管理库,相比 Vuex 更加简洁和灵活:

  • 使用 defineStore 创建 store
  • 支持组合式 API 和选项式 API
  • 内置类型安全
  • 没有 mutations,只有 state、getters 和 actions
  • 支持插件扩展
  • 更好的 Tree-shaking 支持

这只是一个快速入门,Pinia 还有更多高级功能,如订阅、测试等,可以参考 Pinia 官方文档 深入学习。

http://www.dtcms.com/a/517521.html

相关文章:

  • 广州安全教育平台app下载seo外贸网站建设
  • thinkphp8 连接pgsql数据库,报错ERROR: function table_msg(unknown) does not exist
  • 做的比较好的二手交易网站有哪些揭阳网站建设antnw
  • 怎么在百度建立公司网站厦门外贸推广
  • 注册域名之后怎么做网站毕业答辩ppt模板免费下载网站
  • 自适应网站制作公司网站建设商务合同
  • 网站界面设计的发展趋势长春网站建设公司排名前十
  • 03-Machine-3-display_and_touch.py K230外接液晶显示屏与电容触摸屏功能演示
  • 固定在网站底部核酸检测收费
  • 非盈利网站建设问题北京朝阳区楼盘
  • 做淘宝客网站制作教程视频资金盘网站开发多少钱
  • JUC 之 Lock内部组件(队列同步器、阻塞与唤醒、Condition)
  • 知识就是力量——Tkinter与PyQt的区别和优缺点
  • 免费网站大全违法网站开发人员
  • 网页设计师常用网站禁止网站采集
  • 电子商务网站上线活动策划怎么免费搭建自己的网站
  • 一键提交网站中企动力做的网站被镜像
  • 做贺卡网站泰安房地产信息网官网
  • 企业网站制作 厦门wordpress自带小工具栏
  • Chrony的时间服务
  • Langchain之Agent代理的使用
  • 中国正规官方网站有哪些中国建筑设计研究院
  • wordpress建站后发布海尔网站建设不足之处
  • 黄岩做网站公司电话物联网的核心和基础是什么
  • 10-MySQL索引
  • 点餐网站模板 手机端网站设计有哪些创新点
  • 2.单智能体强化学习
  • 可以做任务的网站多元网站
  • 网站负责人不是法人网页ui设计的内容有哪些
  • 网站建设 个人模板抽奖网站插件