mutation
在使用 store.commit 方法提交 mutation 时,还可以传入额外的参数,即 mutation 的载荷(payload)
代码如下:
mutations: {
increment(state,n) {
state.count+=n
}
}
store.commit("increment",10)
复制代码
载荷也可以是一个对象。
代码如下·:
mutations: {
increment(state,payload) {
state.count+=payload.amount
}
}
store.commit("increment",{
amount:10
})
复制代码
提交 mutation 时,也可以使用包含 type 属性的对象,这样传一个参数就可以了
代码如下:
mutations: {
increment(state,payload) {
state.count+=payload.amount
}
}
store.commit({
type:'increment',
amount:10
})
复制代码
在组件中提交 mutation 时可以使用 mapMutation 辅助函数将组件中的方法映射为 store.commit 调用
代码如下:
import { mapMutations } from 'vuex'
export default {
name: 'App',
data() {
return {}
},
methods:mapMutations([
'increment'
])
}
复制代码
将increment
映射为this.$store.commit('increment')
除了使用字符串数组外,mapMutation 函数的参数也可以是一个对象
代码如下:
import { mapMutations } from 'vuex'
export default {
name: 'App',
data() {
return {}
},
methods:mapMutations({
add: 'increment'
})
}
复制代码
大多数情况下,组件还有自己的方法,在这种情况下,可以使用 es6 的展开运算符提取 mapMutation 函数返回的对象属性
代码如下:
import { mapMutations } from 'vuex'
export default {
name: 'App',
data() {
return {}
},
methods:{
...mapMutations({
add: 'increment'
})
}}
复制代码
mapState
当一个组件需要使用多个 store 状态属性时,将这些状态都声明为计算属性就会有些重复和冗余。为了解决这个问题,可以使用 mapState 辅助函数帮助我们生成计算属性
代码如下:
在 store 中定义两个状态
const store = new Vuex.Store({
state: {
count: 0,
message: 'hgk'
}
})
复制代码
在组件中使用 mapState 辅助函数生成计算属性
import { mapState } from 'vuex'
export default {
name: 'App',
data() {
return {
mag: '',
count: ''
}
},
computed: mapState({
count: 'count',
msg: 'message'
})
}
复制代码
注意count: 'count', msg: 'message'
冒号前面的是计算属性的名字,冒号后面是 store 中状态属性的名字,以字符串形式给出
如果计算属性的名字和 store 中状态属性的名字相同,那么还可以进一步简化,直接给 mapState 函数传递一个字符串数组既可
代码如下:
computed: mapState([
'count',
'message'
]
)
复制代码
count
: 映射'this.count 为 store.state.count
message
: 映射'this.message 为 store.state.message
mapState 函数返回的也可以是一个对象,可以使用展开运算符将他和组件的本地计算属性结合一起使用
代码如下:
computed:{
localComputed(){
...mapState({
})
}
}
复制代码
评论