官方推薦的數(shù)據(jù)框架:在vue的開發(fā)中 vue實現(xiàn)視圖層的開發(fā),vuex來實現(xiàn)數(shù)據(jù)層,實現(xiàn)數(shù)據(jù)共享

vuex是整個虛線的內(nèi)容:當(dāng)項目中多個組件中的數(shù)據(jù)傳值很困難時,把公用的數(shù)據(jù)放到一個公共的空間去存儲,某一組件改變了這個公共部分的數(shù)據(jù)內(nèi)容,其他組件就能感知到,vuex虛線中的內(nèi)容就是公共數(shù)據(jù)存儲的區(qū)域
紫色State:所有的數(shù)據(jù)都存儲到State中,組件要用到公用數(shù)據(jù)直接調(diào)用State就可以了(當(dāng)需要改變數(shù)據(jù)時不能直接用組件去改變State里的公用數(shù)據(jù))
黃色Actions:放置的異步操作和一些復(fù)雜的批量的同步操作
紅色Mutations:里面放一個一個同步的對State的修改
組件修改數(shù)據(jù)必須先調(diào)用Actions,Actions做一些異步操作或者是批量的同步操作,Actions再去調(diào)用Mutations,通過Mutations去改變State里的數(shù)據(jù),有時也可以繞過Actions讓組件直接調(diào)用Mutations去修改State的數(shù)據(jù)
當(dāng)組件調(diào)用Actions時是組件調(diào)用Dispatch方法來操作Actions
組件直接調(diào)用Mutations或者Actions調(diào)用Mutations是通過Commit方法調(diào)用Mutations
數(shù)據(jù)發(fā)生變化后 組件的內(nèi)容也就變化
用vuex時可以用vue面板:Vue Devtoos做代碼的調(diào)試

并在全局引入(main.js文件):import引入

Vue對象中添加 store

使用格式:{{this.$store.state.city}}
改變 state 的值:

actions 里的第一個參數(shù) ctx 是 changeCity 的上下文幫助 changeCity 方法拿到 commit,commit 里的 changeCity 是 mutations 里的 changeCity
mutations 中函數(shù)名不需要和組件調(diào)用 dispatch 里的方法名一樣
mutations 里的方法也接受兩個參數(shù)第一個是 state ,第二個是外部( actions 里的 changeCity 傳入的第二個參數(shù))傳入的參數(shù)

數(shù)據(jù)簡單的時候允許繞過 actions 直接調(diào)用 mutations 直接在組件中調(diào)用 commit 方法

vuex里的幾個高級的api
mapState:
先引入:import { mapState } from 'vuex'
mapState 是指把 vuex 里的數(shù)據(jù)映射到組件里的計算屬性 computed 中
圖中就是把 city 這個(公用)數(shù)據(jù)映射到名字為 city 的計算屬性中

之后就可以直接 this.city 這樣用了

他也可以傳入為一個 Object,意思是吧 vuex 中的公用屬性 city 映射到組件的計算屬性中,映射的名字是 currentCity

mapMutation:
先引入

在使用(用在 commit 方法的函數(shù)中):意思是 mutation 中有一個 changeCity,把這個 changeCity 映射到組件中的名字也為 changeCity 里,之后調(diào)用 mutation 的 commit 方法就可以簡化了(注釋部分是 commit 方法)

vuex 里的 getters:它的作用有點類似于組件中的 computed 計算屬性的作用,當(dāng)需要根據(jù) state 里的數(shù)據(jù)算出一些新的數(shù)據(jù)的時候就可以用 mapGetters 來提供新的數(shù)據(jù) 避免數(shù)據(jù)的冗余。用法同 mapState、mapMutation

vuex 里的 Module:當(dāng)遇到非常復(fù)雜的業(yè)務(wù)場景比如有很多公用的數(shù)據(jù)在vuex里存儲比如把所有的 actions 或 mutations 的數(shù)據(jù)都放到一個 actions 或 mutations 里存儲,這個 actions 或 mutations 文件會變得非常龐大不易維護,這時可以借助 Module 來對這個文件進行拆分,拆分以后 moduleA 只需要存儲A模塊所對應(yīng)的 state 存儲和 mutations 等操作,moduleB 只需要存儲B模塊所對應(yīng)的 state 存儲和 mutations 等操作,而在創(chuàng)建 store 時候在對所有模塊進行一個整合,所以維護性更好
