vuex

官方推薦的數(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)試

使用時可以單獨創(chuàng)建一個文件夾并創(chuàng)建index.js文件文件內(nèi)格式

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

Vue對象中添加 store

使用格式:{{this.$store.state.city}}

改變 state 的值:

組件調(diào)用 Actions 時用 dispatch 方法:方法傳入?yún)?shù),第一個參數(shù)是一個在 actions 里定義的方法,第二個是需要傳的值

actions 里的第一個參數(shù) ctx 是 changeCity 的上下文幫助 changeCity 方法拿到 commit,commit 里的 changeCity 是 mutations 里的 changeCity

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

actions 里的的方法調(diào)用commit方法調(diào)用 mutations 里的方法,通過 mutation 里的方法來改變 state 里的數(shù)據(jù)

數(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 這樣用了

之后就可以直接 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
官網(wǎng)給出的代碼

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 時候在對所有模塊進行一個整合,所以維護性更好
官網(wǎng)給出的代碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容