import store from './store/index'
...
new Vue({
el: '#app',
router,
store,
components: {App},
template: '<App/>'
})
在使用mutation的时候,我们是推荐大家把所有的行为常量保存到一个.js文件中,这样更有利于管理我们的项目,因为我们的mutation往往是需要使用action进一步封装的,这样我们在使用的时候,只需要修改常量对象里的属性值,就可以达到同时修改mutation和action的对应关系,一举两得,下面举例给大家参考:
//mutationType.js
export default {
ADD_NEW_RECIPT:'ADD_NEW_RECIPT',
CHANGE_CURR_TAB:'CHANGE_CURR_TAB'
}
//mutations.js
import mutationTypes from '@/store/mutationTypes.js'
const mutations = {
[mutationTypes.ADD_NEW_RECIPT](state, item) {
state.recipeList.push(item);
},
[mutationTypes.CHANGE_CURR_TAB](state, index) {
state.currRecipe=index;
}
}
;
export default mutations
import mutationTypes from '@/store/mutationTypes.js'
const actions = {
add_new_recipt:({commit,state}, type)=>{
commit(mutationTypes.ADD_NEW_RECIPT,type);
},
change_curr_tab:({commit},index)=>{
commit(mutationTypes.CHANGE_CURR_TAB,index)
}
};
export default actions
从上面的例子可以看出,action和mutation使用的是同一个常量表,可以更好的管理我们的修改动作,而不会出现对不上的错误;
最后,我们在组件内引入vuex中存放的state和action,如下
import {mapActions, mapState} from 'vuex'
...
computed: {
...mapState({
recipeList: state => state.recipeList,
currRecipe: state => state.currRecipe
})
},
methods: {
...mapActions([
'add_new_recipt',
'change_curr_tab'
]),
addNewRecipt(type) {
this.add_new_recipt(type)
}
}
这里是推荐大家按照例子中,使用mapActions和mapState以及利用三点扩展符来引入state 和action,state最好存放在组件的computed 属性内,这样当state中的数据发生改变的时候,也会实时的修改computed里定义的变量值,来实现数据的绑定,同时,当我们修改了某些数据的时候,也要同步到state中去,这样数据源才可以保持一致性与准确性;
总结
写这个的时候,只是给个思路去搭建自己的工程文件,并不是说把所有相关知识点都讲一遍,需要有一定的相关知识,不过相信还没自己搭建过工程文件的小伙伴会不知道如何去安排,可以参考参考,这里推荐大家安装chrome的扩展插件Vue.js devtools,可以很有效的帮助我们追踪数据,定位错误。
