1. 程式人生 > >vuex學習四----getters

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'
})