1. 程式人生 > >vuex , 簡單入(liao)門(jie)

vuex , 簡單入(liao)門(jie)

vuex什麼 ? 

官方的說法就是 vuex是專門為vue.js應用程式開發的 狀態管理模式 。並採用集中式儲存 , 管理應用的所有元件的狀態 ,並以相同的規則保證狀態以一種可預估的方式發生變化。

自己理解的就是 vue提供的  前端資料管理倉庫 。

vuex中有五大核心概念 :

1. state    

就是為了儲存資料而存在的。包括全域性所有的狀態  (或者叫做資料來源)

 

2.getter   (可以認為是 store的計算屬性)   /* 補充:計算屬性:

 作用就是監聽資料的變化 (個人理解), 每當state中的資料發生變化的時候都會重新求取計算屬性 ,觸發更新相關聯的dom節點 */

與計算屬性相似 , 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  (個人感覺說的非常通俗易懂好理解)