上一篇详细分析了
Store
的源码以及其实例化的具体过程,这一篇结合具体例子来分析,进一步了解Vuex
的具体过程
Vuex
先写一个整体的Vuex
,下面的Vue
组件都会用到
store.js
1 | import Vue from 'vue' |
state.js
1 | /* |
getters.js
1 | /* |
actions.js
1 | /* |
mutations.js
1 | /* |
Vue组件1
根据分析,实例化Store
会将state
、getters
挂载到组件实例上,所以下面this.$store.state.num
会调用Store
的get
方法访问到state
,而this.$store.getters.num
会直接拿到对应的getter
1 | <template> |
Vue组件2
1 | /* |
Vue组件3
1 | /* |
当需要传递参数的时候,其写法是this.$store.dispatch('increment', 3)
以及this.$store.commit('INCREMENT', 3)
,这样就可以在action
和mutation
中拿到传来的数据了
总结
根据源码分析,又结合实际例子,可以很清晰的了解Vuex
整个过程,以及每一步为什么要如此操作,其为什么会有这些参数。
之前分析过Redux
,对比可以发现,Vue
的action
与Redux
的action
类似,而mutation
则与reducer
类似,所以副作用的操作都要放在action
中,只有mutation
、reducer
是改变state
的唯一途径。