目錄vue
在前面總結過組件間通訊的幾種方式,都有相應的適用的場景。在大型項目中,當組件樹層級愈來愈多,組件間的通訊也就愈來愈麻煩和複雜,特別當多個組件依賴於某些共同的數據,或者不一樣的組件須要能變動某一個數據時,還要保持狀態的響應式的情形下,咱們不得不考慮採起一種更好的方式去組織代碼。vuex
所以,咱們考慮把組件全部共享的數據抽取出來,以一個全局單例的模式統一管理,咱們要實現,在這種組織方式下,無論組件樹的哪一個節點,都能獲取數據或者改變數據,而且依賴此數據的其它組件也能即時獲取改變後最新的數據。把這些組件依賴的數據做爲狀態量進行統一管理,這就是狀態管理。app
在狀態管理中,咱們須要定義一些統一的概念和約定一些強制性的規則來方便管理,以此實現狀態的改變可被追蹤和可被預測。異步
這就是vuex
產生的背後思想,它是專門爲vue
設計的狀態管理庫,充分複用了vue
的數據響應機制來使得狀態的改變也是響應式的。多個依賴於同一狀態的組件,其中任何一個組件改變了某個依賴狀態,其它組件也會也會相應地獲得高效的更新。測試
在vuex
中,咱們定義了以下幾個概念和約定規則:this
// 1. 引入vue 和 vuex import Vue from 'vue' import Vuex from 'vuex' // 2. 在vue中註冊vuex插件 Vue.use(Vuex) // 3. 實例化一個管理狀態的倉庫store const store = new Vuex.Store({ state:{}, getters: {}, mutations: {}, actions: {}, modules: {} }) // 4. 將store 全局注入到vue實例 const app = new Vue({ el: "#app", // 把 store 對象提供給 「store」 選項,這樣就能夠把 store 的實例注入全部的子組件 store, // 其它代碼... }) // 5. 組件中使用 this.$store const Counter = { template: `<div>{{ count }}</div>`, computed: { count () { return this.$store.state.count } } }
總結下約定的規則,簡單的說就是:commit mutation,dispatch action
spa