vuex採用集中式存儲管理應用的全部組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。每一個應用將僅僅包含一個 store 實例。Vuex 經過 store選項,提供了一種機制將狀態從根組件『注入』到每個子組件中(需調用 Vue.use(Vuex))。vue
五個核心概念
-
State: state爲store中的最基本的狀態。
既然 Vuex 的 store 中的狀態是響應式的,那麼當咱們變動狀態時,監視狀態的 Vue 組件也會自動更新。這也意味着 Vuex 中的 mutation 也須要與使用 Vue 同樣遵照一些注意事項:
最好提早在你的 store 中初始化好全部所需屬性。當須要在對象上添加新屬性時,你應該
使用 Vue.set(obj, 'newProp', 123), 或者以新對象替換老對象。例如,利用 stage-3 的對象展開運算符咱們能夠這樣寫:state.obj = { ...state.obj, newProp: 123 }vuex
Vue.set(obj, 'newProp', 123)
state.obj = { ...state.obj, newProp: 123 }
- Getter:getters爲從state中派生出的一些狀態,至關於state的計算屬性。當getter所依賴的state值發生變化時,getters會被從新計算。getters接受store做爲第一個參數,暴露爲store.getters。getters還能夠接受其餘getters做爲第二個參數。
- Mutations:更改 Vuex 的 store 中的狀態的惟一方法是提交 mutation。Vuex 中的 mutations 很是相似於事件:每一個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數 (handler)。這個回調函數就是咱們實際進行狀態更改的地方,而且它會接受 state 做爲第一個參數。mutation雖然相似於一個事件,可是不能直接調用,要經過store.commit('increment')的方式觸發。你能夠向 store.commit 傳入額外的參數。
mutation 必須是同步函數
你能夠在組件中使用 this.$store.commit('xxx') 提交 mutation,或者使用 mapMutations 輔助函數將組件中的 methods 映射爲 store.commit 調用(須要在根節點注入 store)。
- Action:由於mutation爲同步函數而存在。so Action是能夠包含任何異步操做的。可是要記住Action提交的是mutation而不是直接改變state。Action 函數接受一個與 store 實例具備相同方法和屬性的 context 對象,所以你能夠調用 context.commit 提交一個 mutation,或者經過 context.state 和 context.getters 來獲取 state 和 getters。