色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

vue中nextick原理

傅智翔1年前10瀏覽0評論

Vue中的nextTick方法是一個異步方法,它可以讓我們在當前js執行棧執行完畢后執行一個回調函數,有點類似setTimeout(fn, 0)。但是與setTimeout不同的是,nextTick會把回調函數放進一個隊列里,并不會真正的開啟一個定時器去等待執行,它是在當前js執行棧執行完畢后去清空這個隊列,把回調函數依次執行。

那么為什么Vue要使用nextTick呢?

我們都知道Vue是一個響應式框架,它通過數據驅動視圖的渲染。但是當我們改變數據時,視圖的渲染并不是實時反應的,而是在下一個js執行棧里去更新。這就會出現這樣一個問題,當我們改變數據后,立馬去獲取視圖上的某個元素進行操作,有可能會獲取到錯誤的元素,因為此時元素還沒有被渲染出來。這時我們可以使用nextTick方法等到視圖更新完畢后再去獲取操作元素。

Vue.component("example", {
template: `
`, mounted() { console.log(this.$refs.dom.offsetWidth) //0 //數據驅動視圖渲染 this.show = true this.$nextTick(function() { console.log(this.$refs.dom.offsetWidth) //100 }) }, data() { return { show: false } } })

每次修改數據后,我們都可以通過nextTick等待視圖更新完畢,然后去獲取所需的操作元素或者進行其他操作。但是如果我們要頻繁使用nextTick,可能會降低性能,因為nextTick會開啟一個隊列去等待執行回調函數。解決方法就是使用debounce(防抖)去優化這個操作。

mounted(){
console.log(this.$refs.dom.offsetWidth) //0
//防抖函數
let handle = (function(){
let timer = null
return (cb)=>{
if(timer) clearTimeout(timer)
timer = setTimeout(()=>{
Promise.resolve().then(cb)
}, 0)
}
})()
//修改數據
this.show = true
handle(()=>{
console.log(this.$refs.dom.offsetWidth)
})
}

以上就是Vue中nextTick的使用方法及優化方式,它可以讓我們高效的等待視圖更新完畢后進行下一步操作,提高代碼的穩定性及可讀性。