vuex源碼解讀--流程解析

\bullet 前言

? ? 年初的時(shí)候看了一半厕宗,但是當(dāng)時(shí)換完工作就沒(méi)再繼續(xù)了。最近總算騰出空了灵巧,就從頭完整的梳理一遍

\bullet 幾個(gè)疑問(wèn)

? ??\ast 1-為什么在根目錄掛載過(guò)后抬虽,在每個(gè)組件實(shí)例就都能拿到store中的數(shù)據(jù)了?

? ??\ast 2-為什么修改store中的數(shù)據(jù)能夠觸發(fā)vue組件的更新刑峡?

? ??\ast 3-它是怎么做模塊拆分的洋闽?

\bullet 為什么在根目錄掛載過(guò)后,在每個(gè)組件實(shí)例就都能拿到store中的數(shù)據(jù)了

? ? vuex作為vue插件突梦,需要通過(guò)vue.use進(jìn)行注冊(cè)诫舅,在注冊(cè)過(guò)程中vue會(huì)把自身注入到向插件并調(diào)用插件的install進(jìn)行安裝

? ? 而這實(shí)際上是調(diào)用Vue.mixin混入了聲明周期鉤子beforeCreate,由于組件在初始化init過(guò)程中會(huì)有一次配置合并從vue構(gòu)造函數(shù)上讀取使用mixin保存的靜態(tài)屬性option宫患,所以每個(gè)組件都會(huì)執(zhí)行到vuexInit函數(shù)刊懈,自然也就能拿到store中的數(shù)據(jù)了

(組件初始化時(shí)是向上讀取緩存并添加到自身:this.$store = options.parent.$store)

\bullet 為什么修改store中的數(shù)據(jù)能夠觸發(fā)vue組件的更新

? ? 注冊(cè)完后,一般我們都是通過(guò)new Vuex.Store將vuex中的數(shù)據(jù)或公共API進(jìn)行掛載,它會(huì)執(zhí)行到resetStoreVM函數(shù)

? ? 既然是new Vue那就一定會(huì)執(zhí)行組件的初始化邏輯虚汛,所以呢匾浪,也必然會(huì)執(zhí)行initState方法進(jìn)行響應(yīng)式處理。所以基本可以斷定卷哩,它是借助響應(yīng)式實(shí)現(xiàn)的組件更新蛋辈。那么現(xiàn)在只需要看commit的過(guò)程中是怎么完成依賴收集和派發(fā)更新的即可

? ? 可以看到這里拿到我們?cè)趕tore中的mutations下定義的函數(shù)并執(zhí)行

? ? 當(dāng)然,這是被包裝處理過(guò)的函數(shù)殉疼,其實(shí)際上走的是這個(gè)

? ? 可以看到梯浪,這里對(duì)每一個(gè)key都進(jìn)行了一次遍歷,state[key]即是觸發(fā)依賴收集的關(guān)鍵

? ? 接著調(diào)用具體的函數(shù)瓢娜,如下挂洛,state.age = payload 即派發(fā)更新

\bullet vuex是如何做模塊拆分的

? ? 示例代碼如下

? ? 將代碼定位到new ModuleCollection(options),進(jìn)入眠砾,可以看到對(duì)modules遍歷并對(duì)register進(jìn)行遞歸虏劲,依次傳入moduleA和moduleB的內(nèi)容,并通過(guò)children建立父子關(guān)系

? ? ? ? 則褒颈,處理后的module形如:

{

? ? root:{

? ? ? ? children:{

? ??????????a:moduleA,

? ???????????b: moduleB

? ? ? ? }

? ? }

}

? ? ? ? 接著遞歸state通過(guò)Vue.set將子module中的state處理成響應(yīng)式數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柒巫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谷丸,更是在濱河造成了極大的恐慌堡掏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨疼,死亡現(xiàn)場(chǎng)離奇詭異泉唁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)揩慕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門亭畜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人迎卤,你說(shuō)我怎么就攤上這事拴鸵。” “怎么了蜗搔?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵劲藐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我樟凄,道長(zhǎng)瘩燥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任不同,我火速辦了婚禮厉膀,結(jié)果婚禮上溶耘,老公的妹妹穿的比我還像新娘。我一直安慰自己服鹅,他們只是感情好凳兵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著企软,像睡著了一般庐扫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仗哨,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天形庭,我揣著相機(jī)與錄音,去河邊找鬼厌漂。 笑死萨醒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苇倡。 我是一名探鬼主播富纸,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旨椒!你這毒婦竟也來(lái)了晓褪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤综慎,失蹤者是張志新(化名)和其女友劉穎涣仿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體示惊,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡好港,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涝涤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岛杀,死狀恐怖阔拳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情类嗤,我是刑警寧澤糊肠,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站遗锣,受9級(jí)特大地震影響货裹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜精偿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一弧圆、第九天 我趴在偏房一處隱蔽的房頂上張望赋兵。 院中可真熱鬧,春花似錦搔预、人聲如沸霹期。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)历造。三九已至,卻和暖如春船庇,著一層夾襖步出監(jiān)牢的瞬間吭产,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工鸭轮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臣淤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓张弛,卻偏偏與公主長(zhǎng)得像荒典,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吞鸭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355