vuex学习四----getters

1:有时候我们需要从store中的state中派生出一些状态,例如对列表进行过滤并且计数;

computed:{
 doneTodosCount(){
  return   this.$store.state.todos.filter(todo=>todo.done).length
 }
}

如果有多个组件需要用的这个属性,我们要么复制这个函数;或者抽取到一个共享函数然后再多出导入它;这2种方式都不理想
2:VUEX允许我们在store中定义getters,getters接受state作为他的第一个参数;

const store=new Vuex.Store({
 state:{
     todos:[
        {id:1, text:'...', done:true},
        {id:2, text:'...', done:false}
    ]   
    },
 getters:{
     doneTodos: state=>{
        return state.todos.filter(todo=>todo.done)
    }
    }
})

Getters会暴露为store.getters的对象

store.getters.doneTodos

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

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

我们可以很容易的在任何组建中使用它:

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

3:mapGetters辅助函数
mapGetters辅助函数仅仅是将store中的getters映射到局部计算属性


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

如果你想讲一个getters属性另外娶一个名字,使用对象的形式:

mapgetters({
    //映射this.doneCount为store.getters.doneTodosCount
    doneCount:'doneTodosCount'
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值