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