本文的使用时针对于 Vue3 来展开的
当然了项目是是基于 vite
创建的
其他请跳转,pinia 的官方文档
其实有 vuex 的基础 pinia 使用起来会非常简单
npm install pinia
import { createPinia } from 'pinia'
app.use(createPinia())
和 vuex 一样先创建一个 store 文件夹
store 是通过 defineStore()
定义的。使用的话先引入
import { defineStore } from 'pinia'
创建一个全局的变量
// src/stores/counterStore
import { defineStore } from "pinia";
// defineStore 函数返回值本质是一个Hooks
export const useCounterStore = defineStore("counter", {
// 数据管理
state: () => ({
count: 0,
}),
//方法
actions: {
increment() {
this.count++;
},
},
// 计算属性
getters: {
doubleCount() {
return this.count * 2;
},
},
});
在页面中引入 store
import { useCounterStore } from "@/stores/counterStore"
使用 该 store
const counterStore = useCounterStore()
const { count, doubleCount } = counterStore
storeToRefs()
使得从 Store 中提取属性同时保持其响应式const { count, doubleCount } = storeToRefs(counterStore)
实例中使用
<template>
<div>
{{ count }} {{ doubleCount }}
<button @click="couterStore.increment">+</button>
</div>
</template>
<script setup>
import {storeToRefs} from 'pinia' import {useCounterStore} from
'@/stores/counterStore' const couterStore = useCounterStore() const{" "}
{(count, doubleCount)} = storeToRefs(couterStore)
</script>
// 模拟一个异步方法 catchDataApi()
actions: {
async loadData() {
try {
const data = await catchDataApi()
this.products = data
} catch (error) {
}
}
}