vue3中nextTick的作用及示例

在Vue 3中,nextTick是一個用于處理DOM異步更新的工具函數,確保在數據變化后操作最新的DOM。以下是其作用的詳細解析:


核心作用

  • 延遲回調到DOM更新后:Vue的響應式系統會將數據變更批量處理,異步更新DOM。nextTick允許你在下一次DOM更新循環結束后執行代碼,確保能訪問更新后的DOM。

  • 解決異步更新問題:直接修改數據后立即操作DOM可能無法獲取最新狀態,使用nextTick可避免此問題。


實現原理

  • 基于微任務隊列:Vue 3的nextTick優先使用Promise.resolve().then()(微任務)調度回調。若環境不支持Promise,則降級到setTimeout(宏任務)。

  • 統一更新機制:Vue會合并同一事件循環中的數據變更,在下一個tick中一次性更新DOM,nextTick的回調在此后執行。


使用場景

  1. 操作更新后的DOM

    vue

    <template><div v-if="show" ref="content">內容</div><button @click="handleClick">顯示</button>
    </template><script setup>
    import { ref, nextTick } from 'vue';const show = ref(false);
    const content = ref(null);async function handleClick() {show.value = true;await nextTick();console.log(content.value.offsetHeight); // 正確獲取高度
    }
    </script>
  2. 依賴DOM的第三方庫初始化:如地圖、圖表庫需在DOM渲染后初始化。

  3. 組件更新后的邏輯:確保子組件已渲染完成。


Vue 3 vs Vue 2

  • API變化:Vue 3需顯式導入nextTick,而Vue 2通過this.$nextTick或全局Vue.nextTick調用。

    javascript

    // Vue 3
    import { nextTick } from 'vue';
    await nextTick();// Vue 2
    this.$nextTick(() => { ... });
  • 返回值:Vue 3的nextTick返回Promise,支持async/await,更簡潔。


注意事項

  • 執行順序:同一事件循環中多次調用nextTick,回調按調用順序執行。

  • 不保證子組件狀態:若子組件有異步邏輯(如setTimeout),需結合其生命周期鉤子(如mounted)使用。

  • 避免過度使用:頻繁調用可能導致性能問題,優先考慮響應式數據驅動而非直接操作DOM。


代碼示例

javascript

import { nextTick } from 'vue';// 使用回調函數
nextTick(() => {// DOM更新后執行
});// 使用async/await
async function updateData() {data.value = '新值';await nextTick();console.log('DOM已更新');
}

示例

import { nextTick } from "vue";// 寫法1
const showDialog1 = () => {dialogVisible.value = true;// 等待 DOM 更新完畢nextTick(() => {// 對話框滾動條回到頂部(document.querySelector(".el-overlay-dialog") as HTMLElement)?.scrollTo(0, 0);});
};// 寫法2
const showDialog2 = async () => {dialogVisible.value = true;// 等待 DOM 更新完畢await nextTick().then(() => {// 對話框滾動條回到頂部(document.querySelector(".el-overlay-dialog") as HTMLElement)?.scrollTo(0, 0);});
};// 寫法3
const showDialog3 = async () => {dialogVisible.value = true;// 等待 DOM 更新完畢await nextTick();// 對話框滾動條回到頂部(document.querySelector(".el-overlay-dialog") as HTMLElement)?.scrollTo(0, 0);
};

總結

nextTick是處理Vue異步DOM更新的關鍵工具,適用于需要訪問最新DOM的場景。在Vue 3中,其基于Promise的實現簡化了異步流程控制,結合組合式API提高了代碼可讀性。正確使用可避免因DOM更新延遲導致的問題,但需注意合理使用以避免性能損耗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78141.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

拆解大模型“越獄”攻擊:對抗樣本如何撕開AI安全護欄?

該文章首發于奇安信攻防社區:https://forum.butian.net/share/4254 引言 隨著大規模語言模型(LLMs)在內容生成、智能交互等領域的廣泛應用,其安全性和可控性成為學界和產業界關注的焦點。盡管主流模型通過道德對齊機制建立了安全護欄,但研究者發現,通過精心設計的"…

Ubuntu主機上通過WiFi轉有線為其他設備提供網絡連接

以下是在Ubuntu主機上通過WiFi轉有線為Jetson設備提供網絡連接的步驟&#xff1a; ??1. 確認網絡接口名稱?? 在Ubuntu主機上執行以下命令&#xff0c;查看WiFi和有線接口名稱&#xff1a; ip a WiFi接口通常類似 wlp2s0 或 wlan0有線接口通常類似 enp0s25 或 eth0 記下…

通訊錄完善版本(詳細講解+源碼)

目錄 前言 一、使通訊可以動態更新內存 1、contact.h 2、contact.c 存信息&#xff1a; 刪除聯系人&#xff0c;并試一個不存在的人的信息&#xff0c;看看會不會把其他人刪了 ?編輯 修改&#xff1a; ?編輯 排序&#xff1a; ?編輯 銷毀&#xff1a; ?編輯 ?…

Linux操作系統復習

Linux操作系統復習 一. Linux的權限和shell原理1. Linux從廣義上講是什么 從狹義上講是什么&#xff1f;2. shell是什么&#xff1f;3. 為什么要設置一個shell外殼而不是直接和linux 內核溝通4. shell的原理是什么5. Linux中權限的概念6. 如何提升當前操作的權限7. 文件訪問者的…

Spring AI 快速入門:從環境搭建到核心組件集成

Spring AI 快速入門&#xff1a;從環境搭建到核心組件集成 一、前言&#xff1a;Java開發者的AI開發捷徑 對于Java生態的開發者來說&#xff0c;將人工智能技術融入企業級應用往往面臨技術棧割裂、依賴管理復雜、多模型適配困難等挑戰。Spring AI的出現徹底改變了這一局面——…

C++11介紹

目錄 一、C11的兩個小點 1.1、decltype 1.2、nullptr 二、列表初始化 2.1、C98傳統的{} 2.2、C11中的{} 2.3、C11中的std::initializer_list 三、右值引用和移動語義 3.1、左值和右值 3.2、左值引用和右值引用 3.3、引用延長生命周期 3.4、左值和右值的參數匹配 3…

基于機器學習的網絡釣魚郵件智能檢測與防護系統

phishingDP 介紹 phishingDP 是一個基于機器學習的網絡釣魚郵件智能檢測與防護系統&#xff0c;旨在通過深度學習技術識別潛在的釣魚郵件&#xff0c;保護用戶免受網絡詐騙威脅。該系統集成了數據預處理、模型訓練、實時預測和結果可視化功能&#xff0c;提供用戶友好的Web界…

OpenAI 推出「輕量級」Deep Research,免費用戶同享

剛剛&#xff0c;OpenAI 正式上線了面向所有用戶的「輕量級」Deep Research 版本&#xff0c;意味著即便沒有付費訂閱&#xff0c;也能體驗這一強大工具的核心功能。 核心差異&#xff1a;o4-mini vs. o3 模型迭代 傳統的深度研究功能基于更大規模的 o3 模型。輕量級版本則改以…

什么是優質的靜態IP?以及如何選擇優質的靜態IP?

在如今的大數據生態中&#xff0c;靜態IP的使用頻率和重要性不斷提升。但是&#xff0c;我們常聽到業界提到“優質的靜態IP”&#xff0c;那么什么樣的靜態IP能夠稱之為優質&#xff1f;如何判斷這些IP能否滿足我們的需求&#xff1f;今天這篇文章&#xff0c;將為您揭開優質靜…

Hadoop生態圈框架部署 - Windows上部署Hadoop

文章目錄 前言一、下載Hadoop安裝包及bin目錄1. 下載Hadoop安裝包2. 下載Hadoop的bin目錄 二、安裝Hadoop1. 解壓Hadoop安裝包2. 解壓Hadoop的Windows工具包 三、配置Hadoop1. 配置Hadoop環境變量1.1 打開系統屬性設置1.2 配置環境變量1.3 驗證環境變量是否配置成功 2. 修改Had…

搜廣推校招面經八十一

OPPO搜廣推一面面經 一、介紹一下PLE模型 在多任務學習&#xff08;Multi-Task Learning, MTL&#xff09;中&#xff0c;多個任務共享部分模型結構&#xff0c;以提升整體效果。然而&#xff0c;不同任務間存在 任務沖突&#xff08;Task Conflict&#xff09; 問題&#xf…

LangChain 中主流的 RAG 實現方式

文章目錄 **一、基礎流程實現**1. **全自動索引構建&#xff08;VectorstoreIndexCreator&#xff09;**2. **標準問答鏈&#xff08;RetrievalQA&#xff09;**3. **Document Chain 手動檢索**4. **load_qa_chain&#xff08;傳統方式&#xff09;** **二、高級定制化實現**1…

解決:springmvc工程 響應時,將實體類對象 轉換成json格式數據

問題&#xff1a;一直無法將user對象轉成json格式 按理來說&#xff0c;我在類上使用RestController注解&#xff0c;就可以實現將實體類對象寫入響應體中&#xff0c;并作為json格式傳遞到客戶端&#xff0c;但現實是沒有生效&#xff0c;并且出現404&#xff0c;406&#xf…

【踩坑記錄】stm32 jlink程序燒錄不進去

最近通過Jlink給STM32燒寫程序時一直報錯&#xff0c;但是換一個其他工程就可以燒錄&#xff0c;對比了一下jink配置&#xff0c;發現是速率選太高了“SW Device”&#xff0c;將燒錄速率調整到10MHz以下就可以了

運維打鐵:Mysql 分區監控以及管理

文章目錄 一、簡介二、設計邏輯1、配置文件檢查2、創建邏輯3、 刪除邏輯4、重建表分區邏輯5、recognize maxvalue分區表邏輯6、創建多個未來分區邏輯7、定時檢測分區是否創建成功&#xff0c;否則發送告警郵件。 三、解決的問題四、配置例子與介紹 一、簡介 操作數據庫&#xf…

Appium自動化開發環境搭建

自動化 文章目錄 自動化前言 前言 Appium是一款開源工具&#xff0c;用于自動化iOS、Android和Windows桌面平臺上的本地、移動web和混合應用程序。原生應用是指那些使用iOS、Android或Windows sdk編寫的應用。移動網頁應用是通過移動瀏覽器訪問的網頁應用(appum支持iOS和Chrom…

《R語言SCI期刊論文繪圖專題計劃》大綱

今天開始&#xff0c;我將和大家分享系統且詳細的《R語言SCI期刊繪圖專題教程》&#xff0c;內容會從基礎到高階應用&#xff0c;從配色美學到頂刊風格復現&#xff0c;確保大家可以學到高質量內容&#xff01;下面是大綱。 &#x1f4da;《R語言SCI期刊論文繪圖專題計劃》 第…

STUN協議 與 TURN協議

STUN&#xff08;Session Traversal Utilities for NAT&#xff0c;NAT會話穿越應用程序&#xff09;是一種網絡協議&#xff0c; STUN&#xff08;Simple Traversal of User Datagram Protocol through Network Address Translators (NATs)&#xff0c;NAT的UDP簡單穿越&#…

在vscode終端中運行npm命令報錯

解決方案 這個錯誤信息表明&#xff0c;你的系統&#xff08;可能是 Windows&#xff09;阻止了 PowerShell 執行腳本&#xff0c;這是由于 PowerShell 的執行策略導致的。PowerShell 的執行策略控制著在系統上運行哪些 PowerShell 腳本。默認情況下&#xff0c;Windows 可能…

手搓雷達圖(MATLAB)

看下別人做出來什么效果 話不多說&#xff0c;咱們直接開始 %% 可修改 labels {用戶等級, 發帖數, 發帖頻率, 點度中心度, 中介中心度, 帖子類型計分, 被列為提案數}; cluster_centers [0.8, 4.5, 3.2, 4.0, 3.8, 4.5, 4.2; % 核心用戶0.2, 0.5, 0.3, 0.2, 0.1, 0.0, 0.0;…