Getters 是针对State中的属性再次计算,它也是Store 中一个非常重要的组成部分,因为当进入不同页面时,State对象的某个初始值也需要发生相应变化,而Getters 就可以实现这些功能,可以根据不同的页面定义不同的函数,并在对应的页面中执行即可。
一、构建和访问Getters
接下来在名称为useSchStore 的Store对象中,构建一个Getter对象,并在对象中添加两个箭头函数,一个名称为changeName函数,用于重置State中的name属性,另一个名称为changeCount函数,用于重置State中的count属性,代码如下所示
import { defineStore } from "pinia";
export const schStore = defineStore("sch_id", {state: () => {return {name: "精英学校",count: 1200,grade: ['小学', '初中']}},getters: {changeName: state => {state.name = "全日制学校";},changeCount: state => {state.count++;}}
})
在上述代码的Getters属性加粗部分中,推荐使用箭头方式定义函数,state是函数的参数,表示Store中的State对象,通常无法再添加其他参数,因为Getters 定义的函数仅依赖于State对象。如果在其他组件中需要调用该函数,可以加入下列代码:
<script>
import { schStore } from "../../store/schStore"
export default {mounted() {const store = schStore();console.log(store.name)store.changeName;console.log(store.name)}
}
</script>
在上述代码的加粗部分中,由于首次加载时,State中的name属性为初始值,因此,第一次在控制台输出“精英学校”,当调用chageName函数后,State中的name属性值为重置后的“全日制学校”,因此,第二次在控制台输出“全日制学校”。
二、其他操作方式
与State对象一样,Getters对象也可以通过mapState映射成computed对象中的一个成员,当调用时,才会重置State的属性值,如下列代码所示:
<script>
import { mapState } from 'pinia'
import { schStore } from "../../store/schStore";
export default {computed: {...mapState(schStore, ["name", "changeName"])},mounted() {console.log(this.name);this.changeName;console.log(this.name);}
}
</script>
在上述代码的加粗部分中,先调用mapState函数,分别将name属性和changeName函数映射成computed对象中的一个成员,接下来在mounted函数中先输出name属性的初始值,当调用changeName函数后,再次输出name属性的值为重置后的内容。