1. 在Vue生命周期的created()鉤子函數(shù)進(jìn)行的DOM操作一定要放在Vue.nextTick()的回調(diào)函數(shù)中
在 Vue生命周期函數(shù)中 created鉤子函數(shù)中: DOM 并沒有進(jìn)行任何渲染馒疹, 而此時進(jìn)行DOM 操作無異于是徒勞的巡社, 所以此處一定將DOM 操作的js 代碼放進(jìn)Vue.nextTick 回調(diào)函數(shù)中远寸, 與之對應(yīng)的就是mounted()
鉤子函數(shù)叫编, 因為該鉤子函數(shù)執(zhí)行時所有的DOM 掛載和渲染都已經(jīng)完成商佛, 此時在該鉤子函數(shù)中進(jìn)行任何操作都不會有問題空幻。
2. 在數(shù)據(jù)變化后要執(zhí)行某個回調(diào)函數(shù)幌墓,而這個操作需要使用隨數(shù)據(jù)改變而改變的DOM結(jié)構(gòu)的時候贬循, 這個操作都應(yīng)該放進(jìn)Vue.nextTick () 回調(diào)函數(shù)中句柠。
3: Vue的官方文檔中詳細(xì)解釋:
vue 執(zhí)行dom 更新是異步的浦译, 只要是觀察到數(shù)據(jù)變化, vue? 將會開啟一個隊列溯职, 并緩沖在同一事件循環(huán)中發(fā)生的所有數(shù)據(jù)改變精盅。 如果同一個watcher 被多次觸發(fā),只會被推如到隊列中一次谜酒。 在這種緩沖時去除重復(fù)數(shù)據(jù)對于避免不必要的計算叹俏, 和DOM 操作非常重要。 然后下一個事件循環(huán) “tick”中僻族, vue 刷新隊列執(zhí)行實際(去重)工作粘驰。 在Vue 內(nèi)部嘗試對異步隊列使用原生的promise.then 和 MessageChange, 如果執(zhí)行環(huán)境不支持, 會采用setTime(()=> {} , 0)代替述么。