yarn add pinia
npm install pinia
const pinia = createPinia()
const app = createApp(App)
app.use(pinia)
// 核心,注入插件import { defineStore } from "pinia";//引入pinia,必填
export const useMyPinia = defineStore('myPinia',() => {
// myPinia,是必须的,即使唯一的标识也是连接到devtools的标识。
// useMyPinia约点俗称我们应写成usexxx
})
import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useMyPinia = defineStore('myPinia',() => {
let pinia = reactive({// 我们完全可以使用响应式,就像写普通的setup函数一样。
name:'pinia商店',
fruits:'暂时没有水果'
}) // 参数pinia可以理解为vuex的state
function add(){ // 可以理解为actions,mutatios的集合,
//可以像action一样进行一些异步操作,如ajax请求。
// 可以像mutations一样修改state的状态。
pinia.fruits = 'apple'
}
return {
pinia,add // 返回值必须,就像setup一样。
}
})
<template>
<div>
<h1>{{myPinia.pinia.name}}</h1>
<el-button @click="myPinia.add">增加水果</el-button>
<div>{{myPinia.pinia.fruits}}</div>
</div>
</template>
<script lang="ts" setup>
import { useMyPinia } from '../../../../store/js';
const myPinia = useMyPinia()
// myPinia.pinia.name结果为 pinia商店
// myPinia.pinia.fruits 结果为 暂时没有水果
</script>
初始效果如下
当我们点击按钮的时候,在add函数中
pinia.fruits = 'apple'
pinia的基本功能已经实现了!
myPinia.$patch(state => { state.pinia.fruits = 'orange' })
就是这么简单,pinia中的fruits就变成orange了,打开开发者工具。
可以看到,数据直接被修改。
export const useOtherPinia = defineStore('otherPinia',{
state: () => (
{
person:{
name:'小明',
age:18
}
}
),
actions:{
add(){
this.person.name = '小红'
}
},
getters:{
count: state => state.person.age * 10
}
})