日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

全面解析Vue中的$nextTick

瀏覽:99日期:2022-10-16 17:28:33

當在代碼中更新了數據,并希望等到對應的Dom更新之后,再執行一些邏輯。這時,我們就會用到$nextTick

funcion callback(){ //等待Dom更新,然后搞點事。}$nextTick(callback);

官方文檔對nextTick的解釋是:

在下次 DOM 更新循環結束之后執行延遲回調。在修改數據之后立即使用這個方法,獲取更新后的 DOM。

那么,Vue是如何做的這一點的,是不是在調用修改Dom的Api之后(appendChild, textContent = 'xxxxx' 諸如此類),調用了我們的回調函數?實際上發生了什么呢。

源碼

nextTick的實現邏輯在這個文件里:

vue/src/core/util/next-tick.js

我們調用的this.$nextTick實際上是這個方法:

export function nextTick (cb?: Function, ctx?: Object) { let _resolve callbacks.push(() => { if (cb) { try { cb.call(ctx) } catch (e) { handleError(e, ctx, ’nextTick’) } } else if (_resolve) { _resolve(ctx) } }) if (!pending) { pending = true timerFunc() } // $flow-disable-line if (!cb && typeof Promise !== ’undefined’) { return new Promise(resolve => { _resolve = resolve }) }}

可以看到

回調函數被存放到了一個數組里:callbacks。 如果沒有傳遞回調函數,這個方法會返回一個Promise,然后吧reslove當成回調函數放到flushCallbacks中。所以文檔解釋了把本該當成回調函數的callbacks放到then里的用法。 然后,有一個變量叫pending,如果不在pending中,則執行函數timerFunc。而且pending默認等于false。 flushCallbacks這個函數會一口氣執行所有回調函數。 timerFunc

timerFunc定義在這里

可以看到timerFunc是在一個已resolve了的Promise的then 中執行了flushCallbacks.

利用了js事件循環的微任務的機制

所以,每當我們調用$nextTick,如果pending為false,就會調用timerFunc,然后timerFunc會把flushCallbacks給塞到事件循環的隊尾,等待被調用。

if (typeof Promise !== ’undefined’ && isNative(Promise)) { const p = Promise.resolve() timerFunc = () => { p.then(flushCallbacks) }}flushCallbacks

然后在這個文件里還有一個函數叫:flushCallbacks用來把保存的回調函數給全執行并清空。

function flushCallbacks () { pending = false const copies = callbacks.slice(0) callbacks.length = 0 for (let i = 0; i < copies.length; i++) { copies[i]() }}pending

什么時候pending為true呢?

從timerFunc被調用到flushCallbacks被調用期間pending為true

即一個事件循環周期

在pending期間加入的回調函數,會被已經等待執行的flushCallbacks函數給執行。

核心機制

看完源碼,發現除了利用了一個微任務的機制,和Dom更新一點關系都沒有哇。

其實調用nextTick的不僅是開發者,Vue更新Dom時,也用到了nextTick。

開發者更新綁定的數據之后,Vue就會立刻調用nextTick,把更新Dom的回調函數作為微任務塞到事件循環里去。

于是,在微任務隊列中,開發者調用的nextTick的回調函數,就一定在更行Dom的回調函數之后執行了。

但是問題又來了,根據瀏覽器的渲染機制,渲染線程是在微任務執行完成之后運行的。渲染線程沒運行,怎么拿到Dom呢?

因為,渲染線程只是把Dom樹渲染成UI而已,Vue更新Dom之后,在Dom樹里,新的Dom節點已經存在了,js線程就已經可以拿到新的Dom了。除非開發者讀取Dom的計算屬性,觸發了強制重流渲染線程才會打斷js線程。

總結 首先timerFunc函數負責把回調函數們都丟到事件循環的隊尾 然后,nextTick函數負責把回調函數們都保存起來。 調用nextTick函數時會調用timerFunc函數 Vue更新Dom也會使用nextTick,而且在開發者調用nextTick之前。 因為4中的先后關系和事件循環的隊列性質,確保了開發者的nextTick的回調一定在Dom更新之后

以上就是解析Vue中的$nextTick的詳細內容,更多關于Vue中的$nextTick的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久xxxx精品视频| 日本不卡视频一二三区| 国产麻豆精品| 欧美在线黄色| 青草国产精品| 欧美日韩亚洲三区| 国产精品调教视频| 亚洲开心激情| 日韩av影院| 欧美精品国产| 国产激情久久| sm久久捆绑调教精品一区| 精品国产乱码久久久久久樱花| 加勒比视频一区| 97欧美在线视频| 亚洲成人精品| 日韩视频一区二区三区在线播放免费观看| 亚洲资源av| 日日夜夜免费精品视频| 久久国产婷婷国产香蕉| 国产精品videossex久久发布| 久久伊人国产| 久久青青视频| 尤物精品在线| 日韩精品中文字幕吗一区二区 | 捆绑调教美女网站视频一区| 国产成人免费精品| 亚洲91久久| 亚洲日本免费电影| 久久婷婷国产| 不卡一区综合视频| 日韩精品成人在线观看| 欧美精品二区| 欧美亚洲激情| 日韩精品一区二区三区中文| 高清在线一区| 亚洲大片在线| 蜜臀91精品一区二区三区| 亚洲激情婷婷| 91精品国产自产在线丝袜啪| 国产一区二区三区不卡视频网站| 视频福利一区| 日韩综合一区二区| 国产成人精品福利| 亚洲永久字幕| 国产精品色婷婷在线观看| 日韩一区三区| 综合欧美精品| 国产自产自拍视频在线观看| 久久久久亚洲精品中文字幕| 国产一区二区三区自拍| 亚洲精品亚洲人成在线观看| 欧美国产中文高清| 一区在线免费观看| 久久精品国产福利| 亚洲二区三区不卡| 日韩精品久久久久久| 麻豆mv在线观看| 亚洲区国产区| 日韩深夜视频| 青草av.久久免费一区| 日韩精品一区二区三区免费观看| 日韩av中文字幕一区二区| 久久婷婷丁香| 国产乱码精品一区二区三区亚洲人| 99热精品久久| 国产精品网在线观看| 亚洲一区二区动漫| av亚洲一区二区三区| 69堂精品视频在线播放| 国产一区亚洲| 久久精品国产亚洲aⅴ| 免费在线成人网| 亚洲一级少妇| 国产乱码精品| 石原莉奈在线亚洲二区| 日韩久久一区二区三区| 国产欧美91| 午夜一区在线| 婷婷激情一区| 欧美极品中文字幕| 亚洲人成精品久久久| 久久久国产亚洲精品| 久久精品一区二区国产| 亚洲a级精品| 日韩午夜免费| 91精品综合| 成人在线超碰| 麻豆一区二区在线| 亚洲精品乱码久久久久久蜜桃麻豆| bbw在线视频| 国产精品白丝av嫩草影院| 日韩中文字幕无砖| 亚洲综合电影一区二区三区| 亚洲大片在线| 久久久影院免费| 久久精品国产久精国产爱| 97成人超碰| 亚洲精品自拍| 免费在线观看成人| 丝袜美腿亚洲一区二区图片| 香蕉久久99| 亚洲小说欧美另类婷婷| 日韩精品91| 亚洲精品一级二级| 亚洲精品**中文毛片| 精品国产三区在线| 欧美激情视频一区二区三区免费 | 亚洲一区二区三区在线免费| 欧美网站在线| 136国产福利精品导航网址| 免费观看亚洲| 国产精品蜜芽在线观看| 久久av日韩| 欧美激情五月| 久久精品国产福利| 国产va免费精品观看精品视频| 欧美极品中文字幕| 欧美激情福利| 欧美激情91| 国产三级一区| 日韩欧美中文字幕一区二区三区| 亚洲人成亚洲精品| 日韩极品在线观看| 欧美精品国产| 麻豆一区在线| 国产精品久久久久久久久久10秀| 欧美91在线|欧美| 久久精品色播| 国产成人精品一区二区三区视频| 国产999精品在线观看| 在线手机中文字幕| 亚洲天堂1区| 欧美成人精品| 日韩午夜av| 亚洲午夜久久| 日韩激情av在线| 91精品美女| 精品视频一区二区三区四区五区| 成人国产精品一区二区免费麻豆| 精品免费av| 99精品在线| 一区在线视频观看| 四虎在线精品| 国产精品日韩精品中文字幕| 精品三级国产| 日韩黄色大片网站| 99国产成+人+综合+亚洲欧美| 噜噜噜躁狠狠躁狠狠精品视频 | 国产精品久久乐| 精品国产网站| 欧美亚洲国产激情| 亚洲一区二区免费在线观看| 日韩国产欧美在线播放| 国产伦一区二区三区| 国产乱码午夜在线视频| 99精品视频精品精品视频| 三级欧美在线一区| 国产精品一区二区三区av麻| 色婷婷综合网| 日韩欧美一区二区三区在线观看| 老牛影视一区二区三区| 91精品国产自产观看在线| 精品欠久久久中文字幕加勒比| 久久久蜜桃一区二区人| 亚洲欧美日韩国产综合精品二区| 青青青国产精品| 久久夜夜操妹子| 亚洲精品少妇| 国产粉嫩在线观看| 亚洲一区二区日韩| 精品久久久久中文字幕小说| 成人av二区| 国产伦精品一区二区三区视频| 久久精选视频| 亚洲a级精品| av高清不卡| 五月亚洲婷婷 | 国产在线观看www| 首页亚洲欧美制服丝腿| 国产欧美综合一区二区三区| 国产精品专区免费| 蜜臀久久99精品久久久久宅男| 国产精品第一| 五月综合激情| 精品久久99| 亚洲日本国产| 五月激情久久| 国产欧美一区二区三区米奇| 亚洲va中文在线播放免费| 日本91福利区| 影视先锋久久| 免费日韩一区二区三区| 中文亚洲欧美| 高清久久精品| 日本精品在线播放| 成人午夜在线| 偷拍亚洲精品| 欧美特黄一级大片| 国产精品一区二区三区www|