日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue.nextTick()理解

發布時間:2025/5/22 vue 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue.nextTick()理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是Vue.nextTick()

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

注意:重點是獲取更新后的DOM?就是在開發過程中有個需求是需要在created階段操作數據更新后的節點?這時候就需要用到Vue.nextTick()

原因

在created()鉤子函數執行的時候DOM 其實并未進行任何渲染,而此時進行DOM操作無異于徒勞,所以在created中一定要將DOM操作的js代碼放進Vue.nextTick()的回調函數中。與之對應的就是mounted()鉤子函數,因為該鉤子函數執行時所有的DOM掛載和渲染都已完成,此時在該鉤子函數中進行任何DOM操作都不會有問題 。

案例一

<template><div id="app"><div ref="msgDiv">{{msg1}}</div><br/><div>{{msg2}}</div><br/><br/><button @click="changeMsg">點擊我</button></div> </template> <script>export default {name: 'App',data(){return {msg1: "你我貸",msg2: "理財"}}, methods: {changeMsg() {this.msg1 = "飛旋"this.msg2 = this.$refs.msgDiv.textContent;console.log(this.$refs.msgDiv.textContent)this.$nextTick(function(){console.log(this.$refs.msgDiv.textContent)})}}} </script>復制代碼

觸發前:


觸發后:




案例二

<template><div id="app"><div ref="msgDiv" id="msgDiv" v-if="showDiv">{{msg1}}</div><button @click="changeMsg">點擊我</button></div> </template><script>export default {name: 'App',data(){return {msg1: "你我貸",showDiv: false}}, methods: {changeMsg() {this.showDiv = trueconsole.log(document.getElementById("msgDiv"))this.$nextTick(function(){console.log(document.getElementById("msgDiv"))})}}} </script> 復制代碼


點擊前:



點擊后:


注意:上面代碼執行后第一次console.log(document.getElementById("msgDiv"))輸出的是null?這里涉及一個重要的概念?異步更新隊列。

Vue在觀察到數據變化時并不是直接更新DOM,而是開啟一個隊列,并緩沖在同一事件循環中發生的所有數據改變。在緩沖時會去除重復數據,從而避免不必要的計算和DOM操作。然后,在下一個事件循環tick中,Vue刷新隊列并執行實際工作。 事實上,在執行this.showDiv = true;時,div仍然還是沒有被創建出來,直到下一個Vue事件循環時,才開始創建。$nextTick就是用來知道什么時候DOM更新完成的,因此上述代碼中第二個console.log(document.getElementById("msgDiv"))輸出的是<div id="msgDiv">你我貸</div>


總結

以上是生活随笔為你收集整理的Vue.nextTick()理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。