關(guān)于vue組件的更新機(jī)制?resize()?callResize()
組件的更新機(jī)制 resize() callResize()
假設(shè)有一段代碼,通過isCollapse改變觸發(fā)ref的子組件child觸發(fā)方法resize(),借著觸發(fā)callResize()方法。



這是vue組件的更新機(jī)制。
子組件是child,父組件是整個界面 ,在父組件上任意觸發(fā)監(jiān)聽,調(diào)用方法resize();
resize()調(diào)用callResize(),callResize()把下面的3個方法的resize()一次調(diào)用。
循環(huán)遍歷 父觸發(fā),父親告訴子 resize 子告訴孫 resize。沒有孫子,就調(diào)用停止。
想一個樹形結(jié)構(gòu),導(dǎo)航菜單,點(diǎn)擊導(dǎo)航菜單,切換對應(yīng)界面。保證每個節(jié)點(diǎn)都跟著刷新。
就是說,父組件更新了,它的子組件,孫組件都要更新。子組件變化了,它引用的所有組件都要更新。
舉個例子
當(dāng)GlobalHeader中的logo屬性發(fā)生變化,那么第二張圖的這些組件都要更新。


異步更新機(jī)制是如何實(shí)現(xiàn)的
Vue的異步更新機(jī)制的核心是利用了瀏覽器的異步任務(wù)隊(duì)列來實(shí)現(xiàn)的,首選微任務(wù)隊(duì)列,宏任務(wù)隊(duì)列次之。
當(dāng)響應(yīng)式數(shù)據(jù)更新后,會調(diào)用 dep.notify 方法,通知 dep 中收集的 watcher 去執(zhí)行 update方法,watcher.update 將 watcher 自己放入一個 watcher 隊(duì)列(全局的 queue 數(shù)組)。
然后通過 nextTick 方法將一個刷新 watcher 隊(duì)列的方法(flushSchedulerQueue)放入一個全局的callbacks 數(shù)組中。
如果此時(shí)瀏覽器的異步任務(wù)隊(duì)列中沒有一個叫 flushCallbacks 的函數(shù),則執(zhí)行 timerFunc 函數(shù),將 flushCallbacks 函數(shù)放入異步任務(wù)隊(duì)列。如果異步任務(wù)隊(duì)列中已經(jīng)存在 flushCallbacks 函數(shù),等待其執(zhí)行完成以后再放入下一個 flushCallbacks 函數(shù)。 flushCallbacks 函數(shù)負(fù)責(zé)執(zhí)行 callbacks數(shù)組中的所有 flushSchedulerQueue 函數(shù)。
flushSchedulerQueue 函數(shù)負(fù)責(zé)刷新 watcher 隊(duì)列,即執(zhí)行 queue 數(shù)組中每一個 watcher 的 run 方法,從而進(jìn)入更新階段,比如執(zhí)行組件更新函數(shù)或者執(zhí)行用戶 watch 的回調(diào)函數(shù)。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue+jquery+lodash實(shí)現(xiàn)滑動時(shí)頂部懸浮固定效果
這篇文章主要為大家詳細(xì)介紹了vue+jquery+lodash實(shí)現(xiàn)滑動時(shí)頂部懸浮固定效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Vue 3 + Element Plus樹形表格全選多選及子節(jié)點(diǎn)勾選的問題解決方
在本文中,我們解決了Vue 3和Element Plus樹形表格中的全選、多選、子節(jié)點(diǎn)勾選和父節(jié)點(diǎn)勾選等常見問題,通過逐步實(shí)現(xiàn)這些功能,您可以構(gòu)建功能強(qiáng)大且用戶友好的樹形表格組件,以滿足各種數(shù)據(jù)展示需求,對Vue 3 Element Plus樹形表格相關(guān)知識感興趣的朋友一起看看吧2023-12-12
Vue中實(shí)現(xiàn)回車鍵切換焦點(diǎn)的方法
這篇文章主要介紹了在Vue中實(shí)現(xiàn)回車鍵切換焦點(diǎn)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
vue2.0 axios前后端數(shù)據(jù)處理實(shí)例代碼
本篇文章主要介紹了vue2.0 axios前后端數(shù)據(jù)處理實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
vue-cli3.x配置全局的scss的時(shí)候報(bào)錯問題及解決
這篇文章主要介紹了vue-cli3.x配置全局的scss的時(shí)候報(bào)錯問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04
Vue利用Mixin輕松實(shí)現(xiàn)代碼復(fù)用
Mixin,中文翻譯為"混入",在Vue中是一種非常有用的功能,可以解決許多開發(fā)中的常見問題,下面就讓我們一起深入了解一下Mixin在Vue中解決了哪些問題吧2023-06-06
koa2+vue實(shí)現(xiàn)登陸及登錄狀態(tài)判斷
這篇文章主要介紹了koa2+vue實(shí)現(xiàn)登陸及登錄狀態(tài)判斷,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08
vue實(shí)現(xiàn)全匹配搜索列表內(nèi)容
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)全匹配搜索列表內(nèi)容,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09

