store 持有未绑定到您的组件树的状态和业务逻辑
- 托管“全局”状态
- state 数据 ==> data
- getters 计算 ==>computed
- actions 方法 ==>methods
定义 defineStore
- 需要一个唯一的名称
- store是一个reactive包裹的对象,不能对其进行结构
- 使用storeToRefs提取其属性,保持响应性
const useStore=defineStore('main',{
})
state 返回初始状态的函数
interface CounterState {
counter: number
name: string
item: string[]
}
const useStore=defineStore('main',{
state:(): CounterState=>({
counter:0,
name:"qqq",
item:["ssss]
})
})
const store=useStore()
console.log(store.counter)
$reset() 重置到其初始值
store.$reset()
使用computed 获取store值
const counterStore=computed(()=>store.counter*3)
$patch 修改多个属性
store.$patch({
counter:store.counter+1,
name:"22"
})
store.$patch((state)=>{
state.item.push('222')
})
$state 替换state相当于初始化
store.$state={name:"",item:[],counter:0}
getters store状态的计算值
const countStore=defineStore('counter',{
state:()=>({
counter:0,
users:[{id:0,name:"sss"}]
}),
getters:{
doubleCount:(state)=>state.counter*2,
doublePluusOne():number{
return this.counter*2+1
},
doubleCountPlusOne():number{
return this.doubleCount+1
},
getUserId:(state)=>{
return (userId:number)=>state.users.find((users)=>users.id===userId)
}
}
})
const counter=countStore()
console.log(counter.doubleCount)
const getUserByIds=counter.getUserById
console.log(getUserById(2))
actions 相当于组件的methods
const userStore=defineStore('user',{
state:()=>({
counter:0,
userData:{} as {name:string;password:string}
}),
actions:{
increment(){
this.counter++
},
randomizeCounter(){
this.counter=Math.round(100*Math.random())
},
async registerUser(name:string,password:string){
this.userData={
name,
password
}
}
}
})
const users=userStore()
users.registerUser("","")