mapGetters、mapMutations、mapActions用法
lensh opened this issue · 0 comments
lensh commented
首先得通过import从vuex里导入:
import { mapGetters,mapMutations,mapActions } from 'vuex'
1.mapGetters是将store的getters(getters可以认为是state的计算属性)自动映射到组件的局部计算属性里,在组件的计算属性里只需如下申明,就可以直接使用this.products来获取products了:
computed: {
...mapGetters({
products: 'cartProducts',
checkoutStatus: 'checkoutStatus'
})
}
如果你要使用的计算属性名称刚好和getters初始的名称一致(即当键名和键值一样时),那么就可以写成数组的形式。
computed: {
...mapGetters([
'products', //注意这里一定要有引号,才会自动映射
'checkoutStatus'
})
}
原本需要使用this.$store.getters.products来获取products的,现在只需要使用this.products就可以了,是不是更简洁方便了呢?
2.mapMutations辅助函数是将组件中的 methods 映射为 store.commit 调用(需要在根节点注入 store),只需要在组件的methods里声明:
methods: {
...mapMutations([
'increment' // 映射 this.increment() 为 this.$store.commit('increment')
]),
...mapMutations({
add: 'increment' // 映射 this.add() 为 this.$store.commit('increment')
})
}
这样我们就可以在组件里使用this.add()来替代 this.$store.commit('increment')了,又简短了不少。
如果需要传递参数,则可以直接在this.add(argument)里传参数argument
3.Action 类似于 mutation,不同在于:
Action 提交的是 mutation,而不是直接变更状态。
Action 可以包含任意异步操作。
mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用(需要先在根节点注入 store),
使用方法如下:
methods: {
...mapActions([
'increment' // 映射 this.increment() 为 this.$store.dispatch('increment')
]),
...mapActions({
add: 'increment' // 映射 this.add() 为 this.$store.dispatch('increment')
})
}