vuex學習四----getters
阿新 • • 發佈:2019-02-20
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'
})