vuex , 簡單入(liao)門(jie)
vuex什麼 ?
官方的說法就是 vuex是專門為vue.js應用程式開發的 狀態管理模式 。並採用集中式儲存 , 管理應用的所有元件的狀態 ,並以相同的規則保證狀態以一種可預估的方式發生變化。
自己理解的就是 vue提供的 前端資料管理倉庫 。
vuex中有五大核心概念 :
1. state
就是為了儲存資料而存在的。包括全域性所有的狀態 (或者叫做資料來源)
2.getter (可以認為是 store的計算屬性) /* 補充:計算屬性:
與計算屬性相似 , getter 的返回值會根據自身的依賴被快取起來 , 只有當他的依賴發生變化時才會被重新計算
getter 被暴露後可以通過 store.getters 進行訪問 (在元件中可以通過 this.$store.getters)
引數方面 : getter允許state作為第一個引數,也可以接受其他getter作為第二個引數
3.mutation
/* mutation是改變資料狀態state的唯一方法 ,但是要注意的是mutation只支援同步方法 而不支援非同步方法 */
關於mutation個人感覺官方文件說的很清楚 : (地址:https://vuex.vuejs.org/zh-cn/mutations.html)
更改 Vuex 的 store 中的狀態的唯一方法是提交 mutation。Vuex 中的 mutation 非常類似於事件:每個 mutation 都有一個字串的 事件型別 (type) 和 一個 回撥函式 (handler)。這個回撥函式就是我們實際進行狀態更改的地方,並且它會接受 state 作為第一個引數
你不能直接呼叫一個 mutation handler。這個選項更像是事件註冊:“當觸發一個型別為 increment
的 mutation 時,呼叫此函式。”要喚醒一個 mutation handler,你需要以相應的 type 呼叫 store.commit 方法
程式碼:store.commit('increment')
在元件中可以通過使用 this.$store.commit('xxx')
提交 mutation,或者使用 mapMutations
輔助函式將元件中的 methods 對映為 store.commit
呼叫(需要在根節點注入 store
)。
4.action
action類似於mutation 不同在於 :
1.action提交的是mutation (上面有說到 mutation是改變state的唯一方法), 而不是直接變更state(資料狀態)
2.action可以包含任意的一部操作
Action 函式接受一個與 store 例項具有相同方法和屬性的 context 物件,因此你可以呼叫 context.commit
提交一個 mutation,或者通過 context.state
和 context.getters
來獲取 state 和 getters。
action通過store.dispatch 方法來觸發 程式碼如下:(括號中是要觸發的action方法)
store.dispatch('increment')
分發action
在元件中分發action;
在元件中使用 this.$store.dispatch('xxx')
分發 action,或者使用 mapActions
輔助函式將元件的 methods 對映為 store.dispatch
呼叫(需要先在根節點注入 store
)
5.module
module是為了解決 當所有狀態都聚集到一個大物件中時 , store物件會變得臃腫問題 而存在的。
vuex
推薦文章:https://zhuanlan.zhihu.com/p/24357762 (個人感覺說的非常通俗易懂好理解)