一、安裝和基礎配置
安裝Vuex非常簡單,只需在終端中運行如下命令:
npm install vuex --save
在Vue項目中,需要將Vuex引入並通過Vue.use()使用:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
創建一個全局的狀態管理倉庫,主要是為了管理數據,也可以在同一個項目中同時使用多個store,在main.js中進行如下配置:
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
message: 'Hello World!'
}
})
new Vue({
store,
render: h => h(App),
}).$mount('#app')
上述代碼中,state是一個對象,用於存儲數據;message是我們要存儲的數據的名稱。
二、State
state是一個存儲數據的容器,通過它存儲的數據可以在整個應用中進行全局使用。在Vuex中,我們需要定義這個狀態容器,具體代碼如下:
const store = new Vuex.Store({
state: {
count: 0
}
})
上述代碼定義了一個名為count的狀態,其值為0。可以通過$store.state.count來訪問它。
我們還可以對它進行修改,但是在Vue中,狀態的修改是有限制的,只能通過mutations來修改狀態。
三、Mutation
mutation用來修改一個Vuex的狀態,需要使用commit函數來觸發一個mutation。mutation必須是同步的,否則會導致記錄邏輯出現問題。下面是一個基本的mutation代碼:
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++
}
}
})
store.commit('increment')
上述代碼中,increment是一個mutation名稱,它的作用是把count的值+1,需要注意的是,它必須是同步的。
四、Getter
我們可以將Getter看作狀態的計算屬性,它會根據一個或多個狀態的值進行計算並返回結果。Getter非常適合用於相對複雜的狀態處理,可以讓我們在使用狀態時更加方便。
const store = new Vuex.Store({
state: {
count: 0
},
getters: {
doubleCount(state) {
return state.count * 2
}
}
})
console.log(store.getters.doubleCount)
上述代碼中,doubleCount是一個Getter的名稱,它把count的值乘以2並返回結果。
五、Action
Action允許我們在mutation之前進行異步操作,並且在操作完成後再觸發mutation從而更改Vuex的狀態。Action是通過在store中方法中觸發一個或多個mutation來實現這一過程的。下面是一個Action的實例:
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++
}
},
actions: {
incrementAsync(context) {
setTimeout(() => {
context.commit('increment')
}, 1000)
}
}
})
store.dispatch('incrementAsync')
上述代碼中,incrementAsync是一個Action的名稱,它會在1秒之後通過觸發一個名為increment的mutation來增加count的值。
六、Module
當應用開始變得非常大時,我們需要更好地管理狀態,Module可以幫我們完成這項工作。它允許我們把Vuex的狀態分解為多個模塊,從而更好地管理各個狀態。下面是一個Module的實例:
const counter = {
namespaced: true,
state: {
count: 0
},
mutations: {
increment(state) {
state.count++
}
},
actions: {
incrementAsync(context) {
setTimeout(() => {
context.commit('increment')
}, 1000)
}
}
}
const store = new Vuex.Store({
modules: {
counter
}
})
store.dispatch('counter/incrementAsync')
上述代碼中,counter是一個名為counter的Vuex Module,它定義了count的狀態、increment的mutation和incrementAsync的Action。modules容器是Vuex的全局狀態容器,可以存儲多個Module。
七、結束語
通過對Vue狀態管理庫Vuex的詳細介紹,相信大家對Vuex已有更深入的理解。Vuex可以使我們更加方便地管理狀態,提高工作效率。使用Vuex的過程中要注意,一定要遵循Vuex的原則,尤其在修改狀態方面一定要使用mutation。
原創文章,作者:GNQJW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/372380.html