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);