tft每日頭條

 > 生活

 > boosting方法的基本思想

boosting方法的基本思想

生活 更新时间:2024-09-12 21:56:17

有一個div,默認用 v-if 将它隐藏,點擊一個按鈕後,改變 v-if 的值,①讓它顯示出來,②同時拿到這個div的文本内容。如果v-if的值是 false,直接去獲取div内容是獲取不到的,因為此時div還沒有被創建出來,那麼應該在點擊按鈕後,改變v-if的值為 true,div才會被創建,此時再去獲取,示例代碼如下:

boosting方法的基本思想(什麼是nextTick為什麼需要它)1

運行後在控制台會抛出一個錯誤:Cannot read property 'innnerHTML of null,意思就是獲取不到div元素:

boosting方法的基本思想(什麼是nextTick為什麼需要它)2

這裡就涉及Vue一個重要的概念:異步更新隊列.

異步更新隊列

Vue在觀察到數據變化時并不是直接更新DOM,而是開啟一個隊列,并緩沖在同一個事件循環中發生的所數有據改變。在緩沖時會去除重複數據,從而避免不必要的計算和DOM操作。然後,在下一個事件循環tick中,Vue刷新隊列并執行實際(已去重的)工作。所以如果用一個for循環來動态改變數據100次,其實它隻會應用最後1次改變,如果沒有這種機制,DOM就要重繪100次,這固然是一個很大的開銷。

異步更新隊列内部實現機制

Vue會根據當前浏覽器環境優先使用原生的Promise.thenMutationObserver,如果都不支持,就會采用setTimeout代替。

知道了Vue異步更新DOM的原理,上面示例的報錯也就不難理解了。事實上,在執行this.showDiv = true時,div仍然還是沒有被創建出來,直到下一個vue事件循環時,才開始創建。$nextTick就是用來 '知道什麼時候DOM更新完成' 的,所以上面的示例代碼需要修改為,把DOM操作放在$nextTick()方法内,如下圖:

boosting方法的基本思想(什麼是nextTick為什麼需要它)3

這時再點擊事件,控制台就打印出div的内容“這是一段文本“了:

boosting方法的基本思想(什麼是nextTick為什麼需要它)4

就這麼多了,歡迎關注。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved