npm i pinia
import './assets/main.css' import { createApp } from 'vue' import App from './App.vue' //1. 导入 import { createPinia } from 'pinia' //2. 创建 const pinia = createPinia() const app = createApp(App) //3. 使用 app.use(pinia) app.mount('#app')
. 第一个参数 counter 是你的应用中 Store 的唯一 ID,Pinia 将用它来连接 store 和 devtools
. 第二个参数接收 option 对象或 setup 函数;setup 函数和组合式 API 类似,且功能更灵活
import { defineStore } from 'pinia' import { ref, computed } from 'vue' export const useCounterStore = defineStore('counter', ()=>{ //state - ref() const count = ref(0) //getters - computed() const doubleCount = computed( () => count.value * 2 ) //action - function() const increment = () => count.value++ return { count, msg, doubleCount, increment } })
. 逻辑 - 引入仓库、创建仓库实例、使用仓库数据
. 创建仓库实例前无法使用
. 仓库中的状态应指定初始值,否则其中的方法只有执行后才能拿到值
import { useCounterStore } from '@/stores/counter'; const store = useCounterStore(); console.log('store', store);
. 结构 - 渲染仓库数据;这里采用内联事件
<div>{{ store.count }}</div> <div>{{ store.doubleCount }}</div> <div @click="store.increment">store handle</div>
import { useCounterStore } from '@/stores/counter'; const store = useCounterStore(); const { count, increment } = store;
<div @click="increment">仓库数据 - {{ count }}</div>
import { useCounterStore } from '@/stores/counter'; import { storeToRefs } from 'pinia'; const store = useCounterStore(); const { count } = storeToRefs(store);