
上一篇详细分析了
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的唯一途径。