Pinia
安装
npm install pinia
创建 Store
在 src/store 中创建 index.ts,并导出 store
src/store/index.tstypescript
import { createPinia } from 'pinia'
const store = createPinia()
export default store
在 main.ts 中引入并使用
main.tstypescript
import { createApp } from 'vue'
import App from './App.vue'
import store from './store'
const app = createApp(App)
app.use(store)
创建 modules
在 src/store 目录下创建 modules 目录,里面存放项目中所需要使用到的状态。演示代码如下
store/modules/user.tstypescript
import { defineStore } from 'pinia'
interface UserState {
name: string
}
export const useUserStore = defineStore({
id: 'user',
state: (): UserState => {
return {
name: 'kuizuo',
}
},
getters: {
getName(): string {
return this.name
},
},
actions: {
setName(name: string) {
this.name = name
},
},
})
使用
获取 state
<template>
<div>{{ userStore.name }}</div>
</template>
<script lang="ts" setup>
import { useUserStore } from '/@/store/modules/user'
const userStore = useUserStore()
</script>
不过这样写法不优雅,就可以使用 computed
const name = computed(() => userStore.getName) // 前提定义了getters
const name = computed(() => userStore.name)
state 也可以使用解构,但使用解构会使其失去响应式,这时候可以用 pinia 的 storeToRefs
。
import { storeToRefs } from 'pinia'
const { name } = storeToRefs(userStore)
修改 state
可以直接使用userStore.name = "xxx"
来进行修改,但不建议,而是使用 actions 来修改,在上面已经定义一个 setName 方法用来修改 state
userStore.setName('xxx')