pina 状态管理

pina 介绍

什么是状态管理?

理论上来说,每一个 Vue 组件实例都已经在“管理”它自己的响应式状态了。我们以一个简单的计数器组件为例:

counter.vue

<script setup>
import { ref } from 'vue'

// 状态
const count = ref(0)

// 动作
function increment() {
  count.value++
}
</script>

<!-- 视图 -->
<template>{
  { count }}</template>

它是一个独立的单元,由以下几个部分组成:

  • 状态:驱动整个应用的数据源;
  • 视图
### Pinia 快速上手教程 Pinia 是 Vue.js状态管理库,被官方誉为 Vuex 的继任者。它提供了更简洁的 API 和更好的 TypeScript 支持,使得开发者可以轻松管理和共享组件之间的状态。 #### 安装 Pinia 要开始使用 Pinia,首先需要将其安装到项目中。可以通过 npm 或 yarn 来完成这一操作[^2]: ```bash npm install pinia --save ``` 或者如果你使用的是 Yarn,则运行以下命令: ```bash yarn add pinia ``` #### 初始化 Pinia 实例 在 Vue 应用程序中初始化并注册 Pinia 需要在入口文件(通常是 `main.js` 或 `main.ts`)中执行如下代码: ```javascript import { createApp } from 'vue'; import { createPinia } from 'pinia'; const app = createApp(App); const pinia = createPinia(); app.use(pinia).mount('#app'); ``` 这段代码创建了一个新的 Pinia 实例,并通过 `use()` 方法将其挂载到 Vue 应用实例上[^1]。 #### 创建 Store Store 是用于存储应用状态的地方。你可以定义多个 store 文件来组织不同的功能模块。下面是一个简单的例子展示如何创建一个名为 `counter` 的 store: ```javascript // stores/counter.js import { defineStore } from 'pinia'; export const useCounterStore = defineStore('counter', { state: () => ({ count: 0, }), actions: { increment() { this.count++; }, decrement() { this.count--; }, async fetchData() { try { const response = await fetch('/api/data'); // 使用异步请求获取数据 if (!response.ok) throw new Error('Network response was not ok.'); const data = await response.json(); console.log(data); // 处理返回的数据 } catch (error) { console.error('There has been a problem with your fetch operation:', error); } }, }, }); ``` 上述代码展示了如何定义初始状态以及一些基本的操作方法(actions)。值得注意的是,在 action 中可以直接利用 JavaScript 的 `async/await` 特性来进行异步编程[^3]。 #### 访问 State 和 Actions 一旦定义好了 store,就可以在任何地方访问它的状态和行为。例如,在组件内部这样调用: ```html <template> <div> <p>Count is {{ counter.count }}</p> <button @click="increment">Increment</button> <button @click="decrement">Decrement</button> </div> </template> <script setup> import { useCounterStore } from '@/stores/counter'; const counter = useCounterStore(); // 获取 store 实例 function increment() { counter.increment(); } function decrement() { counter.decrement(); } </script> ``` 在这个模板里,我们绑定了按钮点击事件分别对应增加或减少计数器的动作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑石课堂

请给我打钱!!!谢谢,不客气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值