vuex中的mutations、actions
//閱讀本文需要一點vuex的基本知識
commit => mutation //用來觸發同步操作的方法
dispatch=>action //用來觸發異步操作的方法
如果想改變vuex的store 中的狀態的唯一方法是提交(commit) mutation,如果想在action中改變store中的狀態,先要dispatch一個action,action中在commit一個mutation,在mutation中改變store中的值。
mutations
index.js
methods:{
add(){
this.$store.commit(‘increment‘,10)
}
}
mutatons.js
mutations:{
increment(state,n){
state.count+=n;
}
}
////////////////////////////////////////////////////////////////////////////
actions
/index.js
methods:{
add(){
this.$store.dispatch(‘increment‘,{num:1})
}
}
/store/index.js
const app={
state: {
data:‘‘
},
actions:{
increment({commit},count){
commit(‘ADD_NUM‘,count.num)
}
},
mutations:{
ADD_NUM:(state,n)=>{
state.data=n;
}
}
}
export default app
//////////////////////////////////////////////////////////////
文中{commit}
es6中函數的參數是一個對象,函數中用的是對象中的一個方法,是可以通過對象的解構賦值直接獲取到該方法的
因為actions中的函數中喲啊commit mutation,所以會獲取到一個默認的參數context,它是一個store的實例,通過它可以獲取到store的屬性和方法,如 context.state 獲取state屬性,context.commit執行commit命令。所以把
increment(context,count){
context.commit(‘ADD_NUM‘,count.num)
}
簡寫成
increment({commit},count){
commit(‘ADD_NUM‘,count.num)
}
如有不對的地方,請多多指教! ——RLflash
vuex中的mutations、actions