美文网首页
Vuex中的Getters

Vuex中的Getters

作者: 暖A暖 | 来源:发表于2020-03-13 10:23 被阅读0次

在Store仓库中,state是用来存放数据的,如果要对数据进行处理输出,比如数据要过滤,一般我们可以写到computed中。但是如果很多组件都使用这个过滤后的数据,我们可以考虑把这个数据提出来共享。这就是getters存在的意义,我们可以将getters认为是 store 的计算属性(computed)。

就像计算属性一样,getters 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

示例:

假设有一个关于考试分数的数组,我们需要在很多页面中使用,但是只需要显示不及格的成绩,此时我们就要过滤掉不符合要求的数据。

如下所示:

computed: { 
    scoreArr(){ 
        return this.$store.state.score.filter(item => item < 60) 
    }
}

如果很多地方要用到此属性,我们要么复制这个函数,或者抽取到一个共享函数然后在多处导入它,但是不管哪种方式都不是很理想。

Getters的使用

Vuex 允许我们在 store 中定义getters,第一个参数为state:

const getters = {
    style:state => state.style
}

Getters还会将store.getters对象暴露出去,我们可以以属性的形式访问这些值:

computed: {
    doneTodosCount () {
      return this.$store.getters.doneTodosCount
    }
}

Getters 也可以接受其他的 getters 作为第二个参数:

getters: {
  doneTodosCount: (state, getters) => {
    return getters.doneTodos.length
  }
}

mapGetters 辅助函数

mapGetters 辅助函数将 store 中的 getters 映射到局部计算属性中,用法和mapState类似。

首先也是需要引入 mapGetters 函数:

import { mapGetters } from 'vuex'

引入后就可以开始使用了:

import { mapGetters } from 'vuex'

export default {
  computed: {
    // 使用对象展开运算符将getters混入computed对象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
    ])}
}

如果想给一个 getters 属性另取一个名字,可以使用对象形式,例如:

// 给getter属性换名字
mapGetters({
    // 映射this.doneCount为store.getters.doneTodosCount
    doneCount: 'doneTodosCount'
})

相关文章

网友评论

      本文标题:Vuex中的Getters

      本文链接:https://www.haomeiwen.com/subject/ofofshtx.html