Vuex - Getter

123 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

- getters: 计算属性,

getter有点类似vue.js的计算属性,当我们需要从store的state中派生出一些状态,getter就可以对state进行计算操作,它就是store的计算属性。对state 中的数据进行处理都尽量写在getter中,保持页面的整洁,可读性比较高。那么我们就需要使用getter,getter会接收state作为第一个参数,而且getter的返回值会根据它的依赖被缓存起来,只有getter中的依赖值(state中的某个需要派生状态的值)发生改变的时候才会被重新计算。getter可以在多组件之间复用如果一个状态只在一个组件内使用,可以不用getters

这里我们引用上一篇Vuex - State来展开讲解,在state中我们定义了购物车列表数组,存了一些列表数据。在state中存的数据就是为了下一步的铺垫,只有state中在这里定义了,在getter中才能获取对你定义的这个数组做出相应的计算。

注意从 Vue 3.0 开始,getter 的结果不再像计算属性一样会被缓存起来。这是一个已知的问题,将会在 3.2 版本中修复。详情请看 PR #1878

export default {
     // 存储数据
     state: {
        
    },
    //计算属性 
        getters: {
            activeList:(state)=>{
                return state.list.filter(v=>{
                    return v.status
                })
            },
            noActiveList:(state)=>{
                return state.list.filter(v=>{
                    return !v.status
                })
            },
            getList(state,getters){
                return getters.activeList.filter(v=>{
                    return v.num > 5
                })
            },
            getById:(state)=>(id)=>{
                return v.id === id
            }

        },
}

Getter用于对Store中的数据进行加工处理形成新的数据 它只会包装Store中保存的数据,并不会修改Store中保存的数据,当Store中的数据发生变化时,Getter生成的内容也会随之变化。

export default new Vuex.Store({
  .......
  getters:{
    //添加了一个showNum的属性
    showNum : state =>{
      return '最新的count值为:'+state.count;
    }
  }
})

然后打开Addition中,添加插值表达式使用getters,或者也可以在Addition中,导入mapGetters,并将之映射为计算属性

	import { mapGetters } from 'vuex'
computed:{
  ...mapGetters(['showNum'])
}