vue.nextTick()方法的使用詳解

一捕透、Vue.nextTick( [callback, context] )

以下是官網(wǎng)內(nèi)容


參數(shù)

{Function} [callback]

{Object} [context]

用法

在下次 DOM 更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)。在修改數(shù)據(jù)之后立即使用這個(gè)方法撇寞,獲取更新后的 DOM宪躯。


示例

2.1.0 起新增:如果沒有提供回調(diào)且在支持 Promise 的環(huán)境中蔫缸,則返回一個(gè) Promise释树。請(qǐng)注意 Vue 不自帶 Promise 的 polyfill游沿,所以如果你的目標(biāo)瀏覽器不原生支持 Promise (IE:你們都看我干嘛)削祈,你得自己提供 polyfill翅溺。



二、以下加強(qiáng)理解

放在Vue.nextTick()回調(diào)函數(shù)中的執(zhí)行的是會(huì)對(duì)DOM進(jìn)行操作的 js代碼髓抑;nextTick()咙崎,是將回調(diào)函數(shù)延遲在下一次dom更新數(shù)據(jù)后調(diào)用,

當(dāng)數(shù)據(jù)更新了吨拍,在dom中渲染后褪猛,自動(dòng)執(zhí)行該函數(shù)。

可以一起來(lái)寫一個(gè)案例:

具體代碼
當(dāng)我點(diǎn)擊第一個(gè)div

雖然第一個(gè)按鈕的內(nèi)容已經(jīng)按照想法由‘msg’改變?yōu)椤薷暮蟮膍sg’羹饰,但是在控制臺(tái)獲得的數(shù)據(jù)依舊是‘MSG’伊滋。這時(shí)我們的nextTick,就要上場(chǎng)了队秩,不知道它能不能勝任這份工作笑旺,將數(shù)據(jù)和界面進(jìn)行一個(gè)統(tǒng)一。

不負(fù)眾望


Vue實(shí)現(xiàn)響應(yīng)式并不是數(shù)據(jù)發(fā)生變化之后 DOM 立即變化刹碾,而是按一定的策略進(jìn)行 DOM 的更新燥撞。所以才會(huì)出現(xiàn)按鈕一的問(wèn)題。

$nextTick 是在下次 DOM 更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)迷帜,在修改數(shù)據(jù)之后使用 $nextTick物舒,則可以在回調(diào)中獲取更新后的 DOM。


Vue.nextTick(callback) 使用原理:

Vue是異步執(zhí)行dom更新的戏锹,一旦觀察到數(shù)據(jù)變化冠胯,Vue就會(huì)開啟一個(gè)隊(duì)列,然后把在同一個(gè)事件循環(huán) (event loop) 當(dāng)中觀察到數(shù)據(jù)變化的 watcher 推送進(jìn)這個(gè)隊(duì)列锦针。如果這個(gè)watcher被觸發(fā)多次荠察,只會(huì)被推送到隊(duì)列一次。這種緩沖行為可以有效的去掉重復(fù)數(shù)據(jù)造成的不必要的計(jì)算和DOm操作奈搜。而在下一個(gè)事件循環(huán)時(shí)悉盆,Vue會(huì)清空隊(duì)列,并進(jìn)行必要的DOM更新馋吗。

當(dāng)你設(shè)置 vm.someData = 'new value'焕盟,DOM 并不會(huì)馬上更新,而是在異步隊(duì)列被清除宏粤,也就是下一個(gè)事件循環(huán)開始時(shí)執(zhí)行更新時(shí)才會(huì)進(jìn)行必要的DOM更新脚翘。如果此時(shí)你想要根據(jù)更新的 DOM 狀態(tài)去做某些事情灼卢,就會(huì)出現(xiàn)問(wèn)題。来农。為了在數(shù)據(jù)變化之后等待 Vue 完成更新 DOM 鞋真,可以在數(shù)據(jù)變化之后立即使用 Vue.nextTick(callback) 。這樣回調(diào)函數(shù)在 DOM 更新完成后就會(huì)調(diào)用沃于。

什么時(shí)候需要用的Vue.nextTick()

1.Vue生命周期的created()鉤子函數(shù)進(jìn)行的DOM操作一定要放在Vue.nextTick()的回調(diào)函數(shù)中涩咖,原因是在created()鉤子函數(shù)執(zhí)行的時(shí)候DOM 其實(shí)并未進(jìn)行任何渲染,而此時(shí)進(jìn)行DOM操作無(wú)異于徒勞揽涮,所以此處一定要將DOM操作的js代碼放進(jìn)Vue.nextTick()的回調(diào)函數(shù)中抠藕。

在created中操作dom

?當(dāng)你再次點(diǎn)擊firstBtn時(shí),它的innerTest將不會(huì)再被改變蒋困。

2.與之對(duì)應(yīng)的就是mounted鉤子函數(shù)盾似,因?yàn)樵撱^子函數(shù)執(zhí)行時(shí)所有的DOM掛載已完成。

3.當(dāng)項(xiàng)目中你想在改變DOM元素的數(shù)據(jù)后基于新的dom做點(diǎn)什么雪标,對(duì)新DOM一系列的js操作都需要放進(jìn)Vue.nextTick()的回調(diào)函數(shù)中零院;

就是說(shuō)更改數(shù)據(jù)后當(dāng)你想立即使用js操作新的視圖的時(shí)候需要使用它


在mounted中調(diào)用它


可以看到,雖然文本data已經(jīng)進(jìn)行了改變村刨,但是dom的內(nèi)容沒有改變

使用正確的方法進(jìn)行改造


使用nextTick必不可少


完美

4.在使用某個(gè)第三方插件時(shí) 告抄。

在vue生成的某些dom動(dòng)態(tài)發(fā)生變化時(shí)重新應(yīng)用該插件,也會(huì)用到該方法嵌牺,這時(shí)候就需要在 $nextTick 的回調(diào)函數(shù)中執(zhí)行重新應(yīng)用插件的方法打洼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逆粹,隨后出現(xiàn)的幾起案子募疮,更是在濱河造成了極大的恐慌,老刑警劉巖僻弹,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阿浓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蹋绽,警方通過(guò)查閱死者的電腦和手機(jī)芭毙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卸耘,“玉大人退敦,你說(shuō)我怎么就攤上這事◎伎梗” “怎么了苛聘?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)忠聚。 經(jīng)常有香客問(wèn)我设哗,道長(zhǎng),這世上最難降的妖魔是什么两蟀? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任网梢,我火速辦了婚禮,結(jié)果婚禮上赂毯,老公的妹妹穿的比我還像新娘战虏。我一直安慰自己,他們只是感情好党涕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布烦感。 她就那樣靜靜地躺著,像睡著了一般膛堤。 火紅的嫁衣襯著肌膚如雪手趣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天肥荔,我揣著相機(jī)與錄音绿渣,去河邊找鬼。 笑死燕耿,一個(gè)胖子當(dāng)著我的面吹牛中符,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播誉帅,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼淀散,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蚜锨?” 一聲冷哼從身側(cè)響起档插,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踏志,沒想到半個(gè)月后阀捅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡针余,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年饲鄙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圆雁。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忍级,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伪朽,到底是詐尸還是另有隱情轴咱,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站朴肺,受9級(jí)特大地震影響窖剑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戈稿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一西土、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鞍盗,春花似錦需了、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至敷存,卻和暖如春墓造,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背历帚。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工滔岳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挽牢。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓谱煤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親禽拔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刘离,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容