千鋒教育前端Vue3.0全套視頻教程(Kerwin2023版,Vue.js零基礎(chǔ)

Vuex 是一個(gè)專(zhuān)為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理器,采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。在進(jìn)行組件間通信時(shí),vuex作為常用的狀態(tài)管理器,可以跨層級(jí)組件通信,其可以存儲(chǔ)數(shù)據(jù)并可以進(jìn)行調(diào)試。
每一個(gè) Vuex 應(yīng)用的核心就是 store(倉(cāng)庫(kù))?!皊tore”就是一個(gè)容器,包含著應(yīng)用中大部分的狀態(tài) (state)。Vuex 和單純的全局對(duì)象相比,Vuex 的狀態(tài)存儲(chǔ)是響應(yīng)式的。當(dāng) Vue 組件從 store 中讀取狀態(tài)的時(shí)候,若 store 中的狀態(tài)發(fā)生變化,那么相應(yīng)的組件也會(huì)相應(yīng)地得到高效更新。
同時(shí)vuex中它是一個(gè)單一數(shù)據(jù)源,所有數(shù)據(jù)都存儲(chǔ)在state屬性對(duì)象中,此對(duì)象原則上不允許直接去修改,修改它要通過(guò)mutation屬性進(jìn)行修改,其可以實(shí)現(xiàn)同步操作的修改。而mutation 必須是同步函數(shù)的原因就是每一條 mutation 被記錄devtools 都需要捕捉到前一狀態(tài)和后一狀態(tài)的快照。如果是異步函數(shù)中的回調(diào)讓這不可能完成,因?yàn)楫?dāng) mutation 觸發(fā)的時(shí)候,回調(diào)函數(shù)還有可能沒(méi)有被調(diào)用,devtools 不知道什么時(shí)候回調(diào)函數(shù)實(shí)際上被調(diào)用一一實(shí)質(zhì)上任何在回調(diào)函數(shù)中進(jìn)行的狀態(tài)的改變都是不可追蹤的。
如果是異步數(shù)據(jù)的修改的話,就需要通過(guò)actions屬性中的方法來(lái)獲取異步數(shù)據(jù),然后通過(guò)actions中的方法來(lái)調(diào)用commit來(lái)調(diào)用mutation中的方法來(lái)修改state。而通過(guò)action屬性進(jìn)行異步修改時(shí)先在原始組件中將需要進(jìn)行修改操作的那一步處將事件使用dispatch進(jìn)行拋發(fā),拋發(fā)給this.$store,同時(shí)將數(shù)據(jù)傳輸過(guò)去。在此之后定義的store中的actions屬性就會(huì)調(diào)用commit來(lái)讓mutation對(duì)數(shù)據(jù)進(jìn)行修改,然后state中的信息就會(huì)改變。其實(shí)action 類(lèi)似于 mutation,不同在于:action 提交的是 mutation,而不是直接變更狀態(tài);action 可以包含任意異步操作。