vue3中Teleport和Suspense的具體使用
一、Teleport
Vue.js 3.0 的新功能之一是 Teleport。因?yàn)橛袝r(shí),你可能需要將組件的一部分渲染到 DOM 樹中的一個(gè)不同位置,而不是作為組件的直接子節(jié)點(diǎn)渲染。這就是Teleport的用途。
例如,模態(tài)對(duì)話框、提示、通知等都可能使用 Teleport。通常情況下,你可能想要將這些內(nèi)容添加到應(yīng)用的根或者 body 標(biāo)簽下,而不是嵌套在深層的 UI 結(jié)構(gòu)里。Vue 3 中的 Teleport 提供了這樣的機(jī)會(huì),就是不管你的組件在哪里,你都可以將其子組件轉(zhuǎn)移到DOM的任何位置。
在模板中,Teleport 的使用方法如下:
<teleport to="body"> <div class="modal"> <!-- 具體內(nèi)容 --> </div> </teleport>
'body' 是要傳送組件的目標(biāo)元素的選擇器。你可以用任何有效的 CSS 選擇器替換它。
以上面的模態(tài)框?yàn)槔?,一般的寫法可能是?/p>
<div class="parent"> <div class="child"> <div class="modal" v-if="showModal"> I am a modal! </div> </div> </div>
但如果使用teleport,就可以將modal獨(dú)立出來:
<div class="parent"> <div class="child"> <teleport to="body"> <div class="modal" v-if="showModal"> I am a modal! </div> </teleport> </div> </div>
這樣,無論在DOM樹的何處調(diào)用模態(tài)框,模態(tài)框始終會(huì)被渲染到 body 元素下,這可以避免由于 CSS層疊上下文和 z-index 問題造成的樣式問題。
二、Suspense
<Suspense> 是 Vue 3 中的一個(gè)新特性,它能夠處理組件中的異步依賴并在等待過程中提供備用內(nèi)容。
當(dāng)我們使用異步組件時(shí),組件需要一些時(shí)間來加載。在加載完成之前,我們通常會(huì)向用戶展示一些加載狀態(tài)。以前,我們需要在組件內(nèi)部自己處理這個(gè)邏輯。但是現(xiàn)在,有了<Suspense>,我們可以將這個(gè)邏輯提升到組件外部。
Suspense 組件有兩個(gè)插槽: default 插槽和 fallback 插槽。default 插槽用于放置那些可能含有異步依賴的組件,而 fallback 插槽則用于展示加載狀態(tài)。
下面是一個(gè)使用示例:
<template> ? <Suspense> ? ? <template v-slot:default> ? ? ? <Child /> ? ? </template> ? ? <template v-slot:fallback> ? ? ? <div>Loading...</div> ? ? </template> ? </Suspense> </template> <script> // import Child from './components/Child'//靜態(tài)引入 ?? ?import {defineAsyncComponent} from 'vue'? ?? ?const Child = defineAsyncComponent(()=>import('./components/Child')) //異步引入 ?? ?export default { ?? ??? ?name:'App', ?? ??? ?components:{Child}, ?? ?} </script>
在以上代碼中,Child 是一個(gè)異步組件。當(dāng)這個(gè)組件正在加載時(shí),Suspense 會(huì)自動(dòng)切換到fallback插槽,并顯示 “Loading…”。當(dāng)組件加載完成后,Suspense 則會(huì)切換回default插槽,顯示加載完成的組件。
Suspense 能讓我們更方便地控制異步組件的加載狀態(tài),讓代碼看起來更加清晰,使我們能夠?qū)⒏嗟木性谔幚順I(yè)務(wù)邏輯上。
三、nextTick
$nextTick 是 Vue.js 提供的一個(gè)全局API,它用于延遲執(zhí)行一段代碼,延遲到下一次 DOM 更新循環(huán)之后。這在修改數(shù)據(jù)之后立即操作 DOM 結(jié)構(gòu)時(shí)非常有用。
使用 $nextTick 的基本方式如下:
this.someData = 'new value' this.$nextTick(function () { // DOM 更新后的代碼 })
例如,想象一下我們有一個(gè) Vue.js 組件,它有一個(gè)列表。點(diǎn)擊一個(gè)按鈕將在列表中添加一個(gè)新的 item,然后我們想要滾動(dòng)到這個(gè)新創(chuàng)建的 item。如果我們不使用 $nextTick,DOM可能會(huì)在我們嘗試訪問新元素之前還沒有被更新。
舉例來說:
new Vue({ ? // ... ? data: { ? ? items: ['item 1', 'item 2', 'item 3'], ? }, ? methods: { ? ? addItem() { ? ? ? this.items.push(`item ${this.items.length + 1}`); ? ? ? this.$nextTick(() => { ? ? ? ? const list = this.$el.querySelector('ul'); ? ? ? ? list.scrollTop = list.scrollHeight; ? ? ? }); ? ? }, ? }, ? // ... })
在這個(gè)例子中,我們首先更新了 items 數(shù)據(jù),然后使用 $nextTick 等待 Vue.js 更新 DOM。當(dāng)回調(diào)函數(shù)被調(diào)用時(shí),我們知道新的 item 已經(jīng)被添加到了 DOM,然后我們滾動(dòng)列表確保新 item 可以被用戶看到。如果我們沒有使用 $nextTick,list.scrollHeight 可能不會(huì)包含新 item,所以滾動(dòng)操作可能不會(huì)如我們預(yù)期的那樣工作。
到此這篇關(guān)于vue3中Teleport和Suspense的具體使用的文章就介紹到這了,更多相關(guān)vue3 Teleport Suspense內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element表格翻頁第2頁從1開始編號(hào)(后端從0開始分頁)
這篇文章主要介紹了element表格翻頁第2頁從1開始編號(hào)(后端從0開始分頁),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12關(guān)于Vue中的計(jì)算屬性和監(jiān)聽屬性詳解
這篇文章主要介紹了關(guān)于Vue中的計(jì)算屬性和監(jiān)聽屬性詳解,Vue.js模板內(nèi)的表達(dá)式非常便利,但是設(shè)計(jì)它們的初衷是用于簡單運(yùn)算的,在模板內(nèi)放入過長的或復(fù)雜的邏輯時(shí),會(huì)讓模板過重且難以維護(hù),需要的朋友可以參考下2023-05-05vue項(xiàng)目啟動(dòng)端口更改的實(shí)現(xiàn)
在Vue前端項(xiàng)目中,可以通過修改配置文件來指定啟動(dòng)的端口號(hào),本文就來介紹 一下vue項(xiàng)目啟動(dòng)端口更改的實(shí)現(xiàn),感興趣的可以了解一下2023-10-10Vuex數(shù)據(jù)持久化的兩種方式:手動(dòng)存儲(chǔ)和vuex-persistedstate插件詳解
這篇文章主要介紹了Vuex數(shù)據(jù)持久化的兩種方式:手動(dòng)存儲(chǔ)和vuex-persistedstate插件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08在vue中解決提示警告 for循環(huán)報(bào)錯(cuò)的方法
今天小編就為大家分享一篇在vue中解決提示警告 for循環(huán)報(bào)錯(cuò)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue中的el-date-picker時(shí)間選擇器的使用實(shí)例詳解
el-date-picker是Element UI框架中提供的日期選擇器組件,它支持單個(gè)日期、日期范圍、時(shí)間、日期時(shí)間等多種選擇方式,本文給大家介紹Vue中的el-date-picker時(shí)間選擇器的使用,感興趣的朋友一起看看吧2023-10-10vue本地構(gòu)建熱更新卡頓的問題“75?advanced?module?optimization”完美解決方案
這篇文章主要介紹了vue本地構(gòu)建熱更新卡頓的問題“75?advanced?module?optimization”解決方案,每次熱更新都會(huì)卡在?"75?advanced?module?optimization"?的地方不動(dòng)了,如何解決這個(gè)問題呢,下面小編給大家?guī)砹私鉀Q方案,需要的朋友可以參考下2022-08-08