vue3中的pinia的简单学习记录

1、安装pinia

npm i pinia

2、main.js注册

//导入createPinia
import { createPinia } from 'pinia'

import App from './App.vue'


const app = createApp(App)
//把pinia实例加入app中
app.use(createPinia())

3、创建一个store

创建一个store目录创建index.js

//1.导入pinia
import { defineStore } from 'pinia'
import { ref } from 'vue'
//这是定义一个变量导出pinia这个唯一叫做counter的pinia仓库
export const useCounterStore = defineStore('counter', ()=>{
  //2.定义 数据 (state)
  const count = ref(0)

  //3.定义修改数据的方法 (action,支持同步与异步)
  const increment = ()=>{
    count.value++
  }

  // 4.以对象形式返回供组件使用
  return {
    count,
    increment
  }
})

4、组件中使用

<script setup>
  // 1. 导入use方法
	import { useCounterStore } from '@/stores/index'
  // 2. 执行方法得到store的实例对象 store里有数据和方法
  const counterStore = useCounterStore()
</script>

<template>
    //因为获取到了store实例,可以直接调用内部方法与获取内部的数据
	<button @click="counterStore.increment">
    {{ counterStore.count }}
  </button>
</template>

5、getter的使用

按照小兔儿鲜的说法是就是相当于计算属性进行

// 数据(state)
const count = ref(0)
// getter (computed)
const doubleCount = computed(() => count.value * 2)

### 创建和使用 Store 在 Vue 3 中使用 Pinia,首先需要创建一个或多个 store 来管理应用的状态。通过 `defineStore` 函数可以定义一个 store,该函数接受一个唯一标识符和一个包含状态、动作和计算属性的对象。例如,定义一个名为 `useCounterStore` 的 store 来管理计数器的状态[^3]: ```javascript import { defineStore } from &#39;pinia&#39;; export const useCounterStore = defineStore(&#39;counter&#39;, { state: () => ({ count: 0, }), actions: { increment() { this.count++; }, decrement() { this.count--; }, }, getters: { doubleCount: (state) => state.count * 2, }, }); ``` ### 注册 Pinia 在创建了 store 之后,需要在 Vue 应用中注册 Pinia。这可以通过创建一个 Pinia 实例并将其挂载到应用上来完成。这样,所有的组件都可以访问到这个 store[^4]: ```javascript import { createApp } from &#39;vue&#39;; import { createPinia } from &#39;pinia&#39;; import App from &#39;./App.vue&#39;; const pinia = createPinia(); const app = createApp(App); app.use(pinia); app.mount(&#39;#app&#39;); ``` ### 在组件中使用 Store 一旦 Pinia 被注册,就可以在任何组件中导入并使用之前定义的 store。通过调用 `useCounterStore` 函数,可以在组件中获取到 store 的实例,并访问其状态、动作和计算属性[^1]: ```vue <template> <div> <p>Count: {{ counter.count }}</p> <p>Double Count: {{ counter.doubleCount }}</p> <button @click="counter.increment()">Increment</button> <button @click="counter.decrement()">Decrement</button> </div> </template> <script setup> import { useCounterStore } from &#39;./stores/counterStore&#39;; const counter = useCounterStore(); </script> ``` ### 插件和持久化状态 Pinia 还支持插件和持久化状态的功能,这对于构建复杂的应用非常有用。插件可以用来扩展 Pinia 的功能,例如添加日志记录、持久化存储等。持久化状态可以通过插件实现,使得应用在刷新后仍然能够保持之前的状态[^1]。 ### 与 Vuex 的比较 PiniaVuex 相比,提供了一个更简单的 API,减少了不必要的仪式感。Pinia 不再支持 Vuex 中的 mutation 概念,而是直接通过 actions 来修改状态。此外,Pinia 提供了更好的 TypeScript 支持,使得类型推断更加可靠。尽管 PiniaVuex 都用于状态管理,但 Pinia 的设计更加简洁,更适合现代的 Vue 应用开发[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值