本文摘自PHP中文网,作者青灯夜游,侵删。
相关推荐:《vue.js教程》
通俗的理解mutations,里面装着一些改变数据方法的集合,这是Vuex设计很重要的一点,就是把处理数据逻辑方法全部放在mutations里面,使得数据和视图分离。
怎么用mutations?
mutation结构:每一个mutation都有一个字符串类型的事件类型(type)和回调函数(handler),也可以理解为{type:handler()},这和订阅发布有点类似。先注册事件,当触发响应类型的时候调用handker(),调用type的时候需要用到store.commit方法。
1 2 3 4 5 6 7 8 9 | const store = new Vuex.Store({
state: {
count: 1
},
mutations: {
increment (state) {
state.count++}}})
store.commit( 'increment' )
|
载荷(payload):简单的理解就是往handler(stage)中传参handler(stage,payload);一般是个对象。
1 2 3 4 | mutations: {
increment (state, n) {
state.count += n}}
store.commit( 'increment' , 10)
|
mutation-types:将常量放在单独的文件中,方便协作开发。
mutation-types.js
1 | export const SOME_MUTATION = 'SOME_MUTATION'
|
store.js
1 2 3 4 5 6 7 8 9 10 11 | import Vuex from 'vuex'
import { SOME_MUTATION } from './mutation-types'
const store = new Vuex.Store({
state: { ... },
mutations: {
[SOME_MUTATION] (state) {
}
}
})
|
commit:提交可以在组件中使用 this.$store.commit('xxx')
提交 mutation,或者使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用(需要在根节点注入 store)。
1 2 3 4 5 6 7 8 | import { mapMutations } from 'vuex'
export default {
methods: {
...mapMutations([
'increment'
...mapMutations({
add: 'increment'
})}}
|
源码分析
1 2 3 4 5 6 7 8 9 10 | function registerMutation (store, type, handler, path = []) {
const entry = store._mutations[type] || (store._mutations[type] =
[])
entry.push( function wrappedMutationHandler (payload) {
handler(getNestedState(store.state, path), payload)
})
}
|
commit:调用mutation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | commit (type, payload, options) {
if (isObject(type) && type.type) {
options = payload
payload = type
type = type.type
}
const mutation = { type, payload }
const entry = this ._mutations[type]
if (!entry) {
console.error(`[vuex] unknown mutation type: ${type}`)
return
}
this ._withCommit(() => {
entry.forEach( function commitIterator (handler) {
handler(payload)
})
})
if (!options || !options.silent) {
this ._subscribers.forEach(sub => sub(mutation, this .state))
}
}
|
subscribers:订阅store的mutation
1 2 3 4 5 6 7 8 9 10 11 12 | subscribe (fn) {
const subs = this ._subscribers
if (subs.indexOf(fn) < 0) {
subs.push(fn)
}
return () => {
const i = subs.indexOf(fn)
if (i > -1) {
subs.splice(i, 1)
}
}
}
|
更多编程相关知识,请访问:编程教学!!
以上就是Vuex中Mutations怎么理解?怎么用?的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
.vue 是什么
vue weex是啥?
node+vue怎么实现简单的websocket聊天功能?(代码示例)
vue.js算开发工具吗
怎么用npm安装vue
vue和react能做什么
vue watch用法是什么
vue配什么ui框架比较好
vue中如何分离css
vue常见面试题汇总(附答案解析)
更多相关阅读请进入《vue》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » Vuex中Mutations怎么理解?怎么用?