簡(jiǎn)單說一說vuex使用以及對(duì)它的理解粹庞?
Vuex的定義
Vuex是一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式凉当。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。Vuex 也集成到 Vue 的官方調(diào)試工具 devtools extension (opens new window)漫贞,提供了諸如零配置的 time-travel 調(diào)試甸箱、狀態(tài)快照導(dǎo)入導(dǎo)出等高級(jí)調(diào)試功能
理解
- vuex 是 vue 專用的狀態(tài)管理庫育叁。它以全局方式集中管理應(yīng)用的狀態(tài),并且可以保證狀態(tài)變更的可預(yù)測(cè)性芍殖。
- vuex 主要解決的問題是多組件之間狀態(tài)共享的問題豪嗽,利用各種組件通信方式,我們雖然能夠做到狀態(tài)共享豌骏,但是往往需要在多個(gè)組件之間保持狀態(tài)的一致性龟梦,這種模式很容易出現(xiàn)問題,也會(huì)使程序邏輯變得復(fù)雜窃躲。 vuex 通過把組件的共享狀態(tài)抽取出來计贰,以全局單例模式管理,這樣任何組件都能用一致的方式獲取和修改狀態(tài)蒂窒,響應(yīng)式的數(shù)據(jù)也能夠保證簡(jiǎn)潔的單向數(shù)據(jù)流動(dòng)躁倒,我們的代碼將變得更結(jié)構(gòu)化且易維護(hù)。
- vuex 并非必須的洒琢,它幫我們管理共享狀態(tài)秧秉,但卻帶來更多的概念和框架。如果我們不打算開發(fā)大型單頁應(yīng)用或者我們的應(yīng)用并沒有大量全局的狀態(tài)需要維護(hù)衰抑,完全沒有使用 vuex 的必要象迎。一個(gè)簡(jiǎn)單的 Store 模式就足夠了。反之呛踊, Vuex 將會(huì)成為自然而然的選擇砾淌。引用 Redux 的作者 Oan Abramov 的話說就是:Flux 架構(gòu)就像眼鏡:您自會(huì)知道什么時(shí)候需要它。
- 我在使用 vuex 過程中有如下理解:首先是對(duì)核心概念的理解和運(yùn)用谭网,將全局狀態(tài)放入 state 對(duì)象中汪厨,它本身一棵狀態(tài)樹,組件中使用 Store 實(shí)例的 state 訪問這些狀態(tài)蜻底;然后有配套的 mutation 方法修改這些狀態(tài)骄崩,并且只能用 mutation 修改狀態(tài),在組件中調(diào)用 commit 方法提交 mutation 薄辅;如果應(yīng)用中有異步操作或者復(fù)雜邏輯組合要拂,我們需要編寫 action ,執(zhí)行結(jié)束如果有狀態(tài)修改仍然需要提交 mutation 站楚,組件中調(diào)用這些 action 使用 dispatch 方法派發(fā)脱惰。最后是模塊化,通過 modules 選項(xiàng)組織拆分出去的各個(gè)子模塊窿春,在訪問狀態(tài)時(shí)注意添加子模塊的名稱拉一,如果子模塊有設(shè)置 namespace 采盒,那么在提交 mutation 和派發(fā) action 時(shí)還需要額外的命名空間前綴。
- vuex 在實(shí)現(xiàn)單項(xiàng)數(shù)據(jù)流時(shí)需要做到數(shù)據(jù)的響應(yīng)式蔚润,通過源碼的學(xué)習(xí)發(fā)現(xiàn)是借用了 vue 的數(shù)據(jù)響應(yīng)化特性實(shí)現(xiàn)的磅氨,它會(huì)利用 Vue將state 作為 data 對(duì)其進(jìn)行響應(yīng)化處理,從而使得這些狀態(tài)發(fā)生變化時(shí)嫡纠,能夠?qū)е陆M件重新渲染烦租。