vuex,單向數(shù)據(jù)流

隨著前端的項(xiàng)目的越來(lái)越復(fù)雜,出現(xiàn)了一堆概念來(lái)降低開(kāi)發(fā)的復(fù)雜性。單向數(shù)據(jù)流就是其中一個(gè)。

如果項(xiàng)目很簡(jiǎn)單,不需要用單向數(shù)據(jù)流。

單向數(shù)據(jù)流是什么

單向數(shù)據(jù)流指只能從一個(gè)方向來(lái)修改狀態(tài)。下圖是單向數(shù)據(jù)流的極簡(jiǎn)示意:


image.png

與單向數(shù)據(jù)流對(duì)對(duì)應(yīng)的是雙向數(shù)據(jù)流(也叫雙向綁定)。在雙向數(shù)據(jù)流中,Model(可以理解為狀態(tài)的集合) 中可以修改自己或其他Model的狀態(tài), 用戶的操作(如在輸入框中輸入內(nèi)容)也可以修改狀態(tài)。這使改變一個(gè)狀態(tài)有可能會(huì)觸發(fā)一連串的狀態(tài)的變化,最后很難預(yù)測(cè)最終的狀態(tài)是什么樣的。使得代碼變得很難調(diào)試。如下圖所示:


image.png

與雙向數(shù)據(jù)流比,在單向數(shù)據(jù)流中,當(dāng)你需要修改狀態(tài),完全重新開(kāi)始走一個(gè)修改的流程。這限制了狀態(tài)修改的方式,讓狀態(tài)變得可預(yù)測(cè),容易調(diào)試。

單向數(shù)據(jù)流的使用場(chǎng)景

多個(gè)組件會(huì)共享狀態(tài)時(shí),共享狀態(tài)和組件間(兄弟組件)通信變的不容易。我們把共享狀態(tài)抽取出來(lái),用單向數(shù)據(jù)流的方式會(huì)變得容易。

Vuex 簡(jiǎn)介

Vuex 是適用于 Vue.js 應(yīng)用的狀態(tài)管理庫(kù),為應(yīng)用中的所有組件提供集中式的狀態(tài)存儲(chǔ)與操作,保證了所有狀態(tài)以可預(yù)測(cè)的方式進(jìn)行修改。

Vuex 是單向數(shù)據(jù)流的一種實(shí)現(xiàn)。

核心概念

State

State 用來(lái)存狀態(tài)。在根實(shí)例中注冊(cè)了store 后,用 this.$store.state 來(lái)訪問(wèn)。

Getters

Getters 從 state 上派生出來(lái)的狀態(tài)。可以理解為基于 State 的計(jì)算屬性。很多時(shí)候,不需要 Getters,直接用 State 即可。

Mutations

Mutations 用來(lái)改變狀態(tài)。需要注意的是,Mutations 里的修改狀態(tài)的操作必須是同步的。在根實(shí)例中注冊(cè)了 store 后, 可以用 this.$store.commit('xxx', data) 來(lái)通知 Mutations 來(lái)改狀態(tài)。

Actions

Actions 通過(guò)調(diào)用 Mutations 來(lái)改狀態(tài)。Actions 可以包含異步操作。在根實(shí)例中注冊(cè)了 store 后, 可以用 this.$store.dispatch('xxx', data) 來(lái)存觸發(fā) Action。

Vuex 的完整流程

組件中觸發(fā) Action,Action 提交 Mutations,Mutations 修改 State。 組件根據(jù) State 或 Getters 來(lái)渲染頁(yè)面。具體如下圖


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • vuex 場(chǎng)景重現(xiàn):一個(gè)用戶在注冊(cè)頁(yè)面注冊(cè)了手機(jī)號(hào)碼,跳轉(zhuǎn)到登錄頁(yè)面也想拿到這個(gè)手機(jī)號(hào)碼,你可以通過(guò)vue的組件化...
    sunny519111閱讀 8,168評(píng)論 4 111
  • Vuex是什么? Vuex 是一個(gè)專為 Vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,242評(píng)論 0 6
  • 這兩天在做Vue移動(dòng)端的項(xiàng)目,正好用到了Vuex,記錄一下相關(guān)知識(shí)。 一、安裝 npm yarn Vuex是Vue...
    婷樓沐熙閱讀 7,805評(píng)論 2 2
  • Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)...
    白水螺絲閱讀 4,809評(píng)論 7 61
  • 輕輕的我走了正如我輕輕的來(lái)我輕輕的招手作別西天的云彩 那河畔的金柳是夕陽(yáng)中的新娘波光里的艷影在我的心頭蕩漾 軟泥上...
    Sunny_tree閱讀 1,396評(píng)論 0 0

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