在Vue中,mutation函數(shù)是指用來管理應(yīng)用程序狀態(tài)的方法。通過mutation函數(shù),我們可以改變狀態(tài),并且所有的狀態(tài)變更都要從這里開始。
mutation函數(shù)通常是一些簡單的方法,它們接收當(dāng)前狀態(tài)和一個payload參數(shù)。這個payload包含了我們打算用來改變狀態(tài)的信息。
const mutations = { setUserName (state, payload) { state.userName = payload } }
上面的代碼中,我們定義了一個叫做setUserName的mutation函數(shù),它接收一個狀態(tài)參數(shù)state和一個包含新用戶名的payload參數(shù)。該函數(shù)采用ES6的語法結(jié)構(gòu)(state, payload) =>{},將狀態(tài)參數(shù)與payload參數(shù)解構(gòu)出來,然后將新的用戶名設(shè)置到狀態(tài)中。
事實上,mutation函數(shù)通常是一個同步的操作。我們不能在mutation函數(shù)中發(fā)出異步請求,否則我們將會遇到一些奇怪的問題。因為Vuex總是嚴(yán)格遵循“單一狀態(tài)樹”原則,也就是說,所有的變更必須通過mutation函數(shù)來處理。
const mutations = { increment (state, payload) { state.count += payload } }
如果我們想要在mutation函數(shù)中響應(yīng)一些狀態(tài)變化,則需要通過Vue的組件機制來實現(xiàn)。這樣做非常簡單,只需要使用commit方法,將我們的mutation函數(shù)名稱和payload參數(shù)傳遞給它即可。
// main.js import Vue from 'vue' import App from './App.vue' import store from './store' Vue.config.productionTip = false new Vue({ store, render: h =>h(App), }).$mount('#app') // App.vue export default { name: 'App', computed: { count () { return this.$store.state.count } }, methods: { increment () { this.$store.commit('increment', 5) } } }
在上述代碼中,我們從store對象中導(dǎo)入Vue中間件,并在Vue實例中注冊。下一步,我們導(dǎo)入的根組件文件中,訪問狀態(tài)的方法就是通過computed計算屬性進(jìn)行,也就是進(jìn)行映射,映射到vuex中的計數(shù)器。同時,我們可以定義一個命名為increment的方法,然后在這個方法中通過this.$store.commit('increment', 5)來調(diào)用vue中的action函數(shù),實現(xiàn)了一次計數(shù)的加5操作。
總而言之,我們可以利用mutation函數(shù)來管理我們應(yīng)用程序的狀態(tài),而使用Vuex可以使整個過程變得更加容易和可復(fù)用。雖然mutation函數(shù)很簡單,但是它在Vuex中的意義卻非常重大。?