interface.d.ts文件
export interface useMyStore {
id: string
content: string
type: string
status: boolean
collected: boolean
date: string
quality: string
}
useMyStore.js文件
const msgData = [
{
id: '123',
content: '腾讯大厦一楼改造施工项目 已通过审核!',
type: '合同动态',
status: true,
collected: false,
date: '2021-01-01 08:00',
quality: 'high',
},
{
id: '124',
content: '三季度生产原材料采购项目 开票成功!',
type: '票务动态',
status: true,
collected: false,
date: '2021-01-01 08:00',
quality: 'low',
},
]
type MsgDataType = typeof msgData;
export const useMyStore = defineStore('useMyStore', {
state: () => ({
msgData,
}),
getters: {
unreadMsg: (state) => state.msgData.filter((item: useMyStore) => item.status),
readMsg: (state) => state.msgData.filter((item: useMyStore) => !item.status),
},
actions: {
setMsgData(data: MsgDataType) {
this.msgData = data
},
},
persist: true,
})
index.vue文件
import { storeToRefs } from 'pinia'
import { useMyStore } from '@/store'
const myStore = useMyStore()
const { msgData, unreadMsg, readMsg } = storeToRefs(myStore)
storeToRefs
是 Pinia 库中的一个辅助函数,用于将存储对象(store)中的属性转换为响应式的引用。
在上面的例子中,
使用 storeToRefs
函数将存储对象 myStore
中的 msgData
、unreadMsg
和 readMsg
属性转换为响应式的引用,
这意味着当存储对象中的这些属性发生变化时,引用也会相应地更新。
这样做的好处是,
我们可以在组件中直接使用 msgData
、unreadMsg
和 readMsg
这些响应式引用,而不需要手动调用 ref
函数创建响应式引用,
这样可以简化代码,并确保在模板中使用这些属性时能够保持响应式。
总之,storeToRefs
函数是用于将存储对象中的属性转换为响应式引用的便捷方法,有助于简化在 Vue 3 中使用 Pinia 进行状态管理的过程。