精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Vue 中使用defineAsyncComponent 延遲加載組件

開發(fā) 前端
使用 Vue 3 的 defineAsyncComponent 特性可以讓我們延遲加載組件。這意味著它們僅在需要時從服務(wù)器加載。

[[414540]]

使用 Vue 3 的 defineAsyncComponent 特性可以讓我們延遲加載組件。這意味著它們僅在需要時從服務(wù)器加載。

這是改善初始頁面加載的好方法,因?yàn)槲覀兊膽?yīng)用程序?qū)⒁暂^小的塊加載,而不必在頁面加載時加載每個組件。

在本教程中,我們將學(xué)習(xí) defineAsyncComponent 的全部內(nèi)容,并看一個例子,該例子將一個彈出窗口的加載推遲到我們的應(yīng)用程序需要的時候。

好了,讓我們開始吧。

什么是defineAsyncComponent

  1. // SOURCE: https://v3.vuejs.org/guide/component-dynamic-async.html 
  2. const AsyncComp = defineAsyncComponent( 
  3.   () => 
  4.     new Promise((resolve, reject) => { 
  5.       resolve({ 
  6.         template: '<div>I am async!</div>' 
  7.       }) 
  8.     }) 

defineAsyncComponent 接受一個返回Promise的工廠函數(shù)。當(dāng)我們成功地從服務(wù)器獲取組件時,這個Promise應(yīng)該會被 resolve ,如果出現(xiàn)錯誤則會被 reject 。

要使用它,我們必須從Vue中導(dǎo)入它,然后才能在腳本的其余部分中使用它。

我們也可以使用工廠函數(shù)中的 import ,輕松地從其他文件中添加Vue組件。

  1. import { defineAsyncComponent } from "vue"  
  2.  
  3. // 簡單使用 
  4. const LoginPopup = defineAsyncComponent(() => import("./components/LoginPopup.vue")) 

這是使用 defineAsyncComponent 的最簡單方法,但我們也可以傳入一個完整的選項(xiàng)對象,配置幾個更高級的參數(shù)。

  1. // with options  
  2. const AsyncPopup = defineAsyncComponent({  
  3.   loader: () => import("./LoginPopup.vue"), 
  4.   loadingComponent: LoadingComponent, /* 在加載時顯示 */ 
  5.   errorComponent: ErrorComponent, /* 顯示是否有錯誤 */ 
  6.   delay: 1000, /* 在顯示加載組件之前延遲毫秒 */ 
  7.   timeout: 3000 /* 這個毫秒之后的超時 */ 
  8. }) 

就我個人而言,我發(fā)現(xiàn)自己更經(jīng)常使用第一種較短的語法,它對我的大多數(shù)使用情況都有效,但這完全取決于你。

就這么簡單,讓我們進(jìn)入我們的例子。

使用defineAsyncComponent延遲加載彈出組件

在本例中,我們將使用一個由單擊按鈕觸發(fā)的登錄彈出窗口。

每當(dāng)我們的應(yīng)用程序加載時,我們不需要我們的應(yīng)用程序加載此組件,因?yàn)橹挥性谟脩魣?zhí)行特定操作時才需要它。

所以這就是我們的登錄組件的樣子,它只是通過用 position: fixed 將屏幕的其余部分涂黑來創(chuàng)建一個彈出窗口,并且有一些輸入和一個提交按鈕。

  1. <template> 
  2.    <div class="popup"
  3.        <div class="content"
  4.            <h4> Login to your account </h4> 
  5.            <input type="text" placeholder="Email" /> 
  6.            <input type="password" placeholder="Password" /> 
  7.            <button> Log in </button> 
  8.        </div> 
  9.    </div> 
  10. </template> 
  11.  
  12. <script> 
  13. </script> 
  14.  
  15. <style scoped> 
  16. .popup { 
  17.     position: fixed; 
  18.     width: 100%; 
  19.     top: ;  
  20.     left: ; 
  21.     height: 100%; 
  22.     background-color: rgba(, , , 0.2); 
  23.     display: flex; 
  24.     justify-content: center; 
  25.     align-items: center; 
  26. .content { 
  27.    min-width: 200px; 
  28.    width: 30%; 
  29.    background: #fff; 
  30.    height: 200px; 
  31.    padding: 10px; 
  32.    border-radius: 5px; 
  33. input[type="text"], input[type="password"] { 
  34.     border: ; 
  35.     outline: ; 
  36.     border-bottom: 1px solid #eee; 
  37.     width: 80%; 
  38.     margin:  auto; 
  39.     font-size: 0.5em; 
  40. button { 
  41.    border: ; 
  42.    margin-top: 50px; 
  43.    background-color:#8e44ad; 
  44.    color: #fff; 
  45.    padding: 5px 10px; 
  46.    font-size: 0.5em; 
  47. </style> 

而不是像我們通常那樣導(dǎo)入它并將其納入我們的 components 選項(xiàng)中。

  1. <!-- "Standard" way of doing things --> 
  2. <template> 
  3.   <button @click="show = true"> Login </button> 
  4.   <login-popup v-if="show" /> 
  5. </template> 
  6.  
  7. <script> 
  8. import LoginPopup from './components/LoginPopup.vue' 
  9. export default { 
  10.   components: { LoginPopup }, 
  11.   data() { 
  12.     return { 
  13.       show: false 
  14.     } 
  15.   } 
  16. </script> 

我們可以改為使用 defineAsyncComponent 僅在需要時加載它(意味著單擊按鈕并切換我們的 v-if)

  1. <!-- Use defineAsyncComponent  --> 
  2. <template> 
  3.   <button @click="show = true"> Login </button> 
  4.   <login-popup v-if="show" /> 
  5. </template> 
  6.  
  7. <script> 
  8. import { defineAsyncComponent } from 'vue' 
  9. export default { 
  10.   components: {  
  11.     "LoginPopup" : defineAsyncComponent(() => import('./components/LoginPopup.vue')) 
  12.   }, 
  13.   data() { 
  14.     return { 
  15.       show: false 
  16.     } 
  17.   } 
  18. </script> 

雖然這在我們使用我們的應(yīng)用程序時可能看起來是一樣的,但讓我們檢查元素 > 網(wǎng)絡(luò)來理解這個小而重要的區(qū)別。

如果我們不使用 defineAsyncComponent,一旦我們的頁面加載,我們就會看到我們的應(yīng)用程序從服務(wù)器上獲得LoginPopup.vue。雖然在這個例子中,這可能不是最大的性能問題,但它仍然會減慢加載速度,如果我們有幾十個組件這樣做,它真的會加起來。

但是,如果我們使用 defineAsyncComponent 查看同一個選項(xiàng)卡,我們會注意到當(dāng)我們的頁面加載時,LoginPopup.vue 不見了,這是因?yàn)樗€沒有加載。

但是一旦我們點(diǎn)擊我們的按鈕并告訴我們的應(yīng)用程序顯示我們的彈出窗口,這時它就會從服務(wù)器加載,我們可以在網(wǎng)絡(luò)標(biāo)簽中看到它。

這有助于我們實(shí)現(xiàn)最佳性能。我們只想在我們的頁面初始加載時加載需要的組件。有條件渲染的組件在我們的頁面加載時往往是不需要的,所以為什么要讓我們的應(yīng)用程序加載它們呢?

如何使用異步設(shè)置功能

無論我們是否使用 defineAsyncComponent 延遲加載,任何具有異步設(shè)置功能的組件都必須用 包裝。

簡而言之,創(chuàng)建一個異步設(shè)置函數(shù)是我們的一個選擇,可以讓我們的組件在渲染前等待一些API調(diào)用或其他異步動作。

這是我們具有異步設(shè)置的組件。它使用 setTimeout() 模擬 API 調(diào)用。

  1. <template> 
  2.    <div class="popup"
  3.        <div class="content"
  4.             <p> Loaded API: {{ article }} </p> 
  5.            <h4> Login to your account </h4> 
  6.            <input type="text" placeholder="Email" /> 
  7.            <input type="password" placeholder="Password" /> 
  8.            <button> Log in </button> 
  9.        </div> 
  10.    </div> 
  11. </template> 
  12.  
  13. <script> 
  14. const getArticleInfo = async () => { 
  15.      // wait 3 seconds to mimic API call 
  16.     await new Promise(resolve => setTimeout(resolve, 1000)); 
  17.     const article = { 
  18.         title: 'My Vue 3 Article'
  19.         author: 'Matt Maribojoc' 
  20.     } 
  21.     return article 
  22. export default { 
  23.     async setup() { 
  24.         const article = await getArticleInfo() 
  25.         console.log(article) 
  26.         return { 
  27.             article 
  28.         } 
  29.     } 
  30. </script> 

我們可以在有或沒有 defineAsyncComponent 的情況下將它導(dǎo)入到我們的組件中

  1. import LoginPopup from './components/LoginPopup.vue' 
  2. // OR  
  3. const LoginPopup = defineAsyncComponent(() => import("./components/LoginPopup.vue")) 

但是如果我們想讓它在我們的模板中渲染,我們需要將它包裝在一個 Suspense 元素中。這將等待我們的 setup 函數(shù)在嘗試渲染我們的組件之前解析。

  1. <template> 
  2.   <button @click="show = true"> Login </button> 
  3.   <Suspense v-if="show"
  4.     <template #default
  5.       <login-popup  /> 
  6.     </template> 
  7.     <template #fallback> 
  8.       <p> Loading... </p> 
  9.     </template> 
  10.   </Suspense> 
  11. </template> 

這就是結(jié)果。用戶會看到 "正在加載......",然后在3秒后(我們的setTimeout的硬編碼值),我們的組件將渲染。

默認(rèn)情況下,我們使用 defineAsyncComponent 定義的所有組件都是可暫停的。

這意味著如果一個組件的父鏈中有 Suspense,它將被視為該 Suspense 的一個異步依賴。我們的組件的加載、錯誤、延遲和超時選項(xiàng)將被忽略,而是由 Suspense 來處理。

最后的想法

defineAsyncComponent 在創(chuàng)建有幾十個組件的大型項(xiàng)目時是有好處的。當(dāng)我們進(jìn)入到懶惰加載組件時,我們可以有更快的頁面加載時間,改善用戶體驗(yàn),并最終提高你的應(yīng)用程序的保留率和轉(zhuǎn)換率。

我想知道你對這個功能的看法。如果你已經(jīng)在你的應(yīng)用中使用它了,請?jiān)谙旅娴脑u論中告訴我。

原文:https://learnvue.co/2021/06/lazy-load-components-in-vue-with-defineasynccomponent/

作者:Matt Maribojoc

本文轉(zhuǎn)載自微信公眾號「前端全棧開發(fā)者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系前端全棧開發(fā)者公眾號。

 

責(zé)任編輯:武曉燕 來源: 前端全棧開發(fā)者
相關(guān)推薦

2024-08-13 09:26:07

2024-08-07 10:16:00

2021-09-29 11:33:19

異步組件Vue 3

2009-09-24 11:41:46

Hibernate延遲

2009-06-17 11:18:02

Hibernate延遲

2023-07-28 13:55:40

便捷選項(xiàng)組件

2017-07-14 10:10:08

Vue.jsMixin

2024-10-15 07:42:09

Vue動態(tài)加載

2009-09-28 09:56:53

Hibernate屬性

2022-02-08 15:55:00

Vue組件庫Vue Demi

2012-08-15 11:36:13

Hibernate

2021-05-08 09:49:07

JavaScript延遲加載

2009-09-25 10:17:21

Hibernate延遲

2009-09-25 10:47:25

Hibernate延遲

2015-08-25 10:28:38

前端圖片延遲加載

2020-08-04 11:35:38

Vue前端裝飾器

2021-04-17 18:24:04

Vue.js嵌套路由前端

2020-02-10 10:23:03

VueJSX前端

2021-09-07 10:24:36

Vue應(yīng)用程序Web Workers

2022-09-20 12:21:25

Vue2Vue3$attrs
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

久久美女精品| 国产成人精品亚洲精品色欲| 午夜视频在线观看国产| 国产夫妻在线观看| 99re国产精品| 最近中文字幕日韩精品| 亚洲热在线视频| 超碰高清在线| 国产精品久久国产精麻豆99网站| 成人蜜桃视频| 中文字幕 欧美激情| 伊人久久成人| 久久精品99久久香蕉国产色戒| 国产成人精品综合久久久久99| av成人影院在线| 国产精品的网站| 免费99视频| 国产福利第一视频| 日韩中文字幕不卡| 午夜精品久久久久久久久久久久久| 国产综合精品久久久久成人av| 一区二区三区视频播放| 在线精品视频一区二区| 日本精品久久久久久久久久| 天天在线视频色| 91看片淫黄大片一级在线观看| 91精品在线观看视频| 久久国产视频一区| 亚洲精品女人| 欧美巨大黑人极品精男| 国产一二三av| 欧洲激情视频| 亚洲精品一二三**| 亚洲久本草在线中文字幕| 精品一区国产| 粉嫩小泬无遮挡久久久久久| 热久久国产精品| 欧日韩在线观看| 亚洲精品午夜久久久久久久| 欧美.www| 久久在线免费视频| 综合 欧美 亚洲日本| 嫩草影视亚洲| 精品视频一区在线视频| 视频免费在线观看| 国产精品流白浆在线观看| 日韩欧美在线1卡| 黄色a级三级三级三级| 欧美天堂一区| 欧美疯狂性受xxxxx喷水图片| wwww.国产| 黄色成人在线观看网站| 欧美视频在线不卡| 亚洲人视频在线| 欧美成人xxxx| 在线观看91av| 少妇性l交大片7724com| 制服丝袜在线一区| 国产成人免费精品| 欧美日韩中文字幕一区二区| 91香蕉视频污版| 成人在线黄色| 337p亚洲精品色噜噜| 五月天丁香花婷婷| 麻豆国产精品| 亚洲第一男人天堂| 欧美性xxxx图片| 自拍偷拍一区| 在线观看视频99| 久久久久久久久久97| 中文字幕亚洲综合久久五月天色无吗''| 北条麻妃99精品青青久久| 看免费黄色录像| 海角社区69精品视频| 国模精品视频一区二区三区| 国产精品va无码一区二区三区| 久久亚洲二区| 国产专区欧美专区| 亚洲成人中文字幕在线| www.欧美色图| 日本精品一区二区三区不卡无字幕| av大片在线观看| 亚洲色图清纯唯美| 五月丁香综合缴情六月小说| 大胆人体一区二区| 欧美日韩精品欧美日韩精品| 成年人看片网站| 亚洲欧洲美洲国产香蕉| 中文字幕亚洲综合| 国产真实乱偷精品视频| 日韩影院在线观看| 国产精品久久久久久久久久免费 | 51精品视频一区二区三区| 老女人性生活视频| 最近国产精品视频| 九九热在线精品视频| 无码人妻av免费一区二区三区 | 国产一级大片在线观看| 亚洲黄页网站| 久久精品视频中文字幕| 日本少妇全体裸体洗澡| 奇米影视一区二区三区小说| 99re在线国产| 成人精品一区| 亚欧色一区w666天堂| 邪恶网站在线观看| 精品国产午夜肉伦伦影院| 中文字幕精品一区二区精品| 国产精品成人免费一区二区视频| 日韩av在线发布| 国产乱子伦精品| 国产美女福利在线| 在线一区二区视频| 菠萝菠萝蜜网站| 欧美国产日本| 成人精品一区二区三区电影免费| 色资源在线观看| 一区二区三区免费在线观看| 日本超碰在线观看| 婷婷综合一区| 久久露脸国产精品| 精品国产999久久久免费| 欧美国产日韩a欧美在线观看| 精品国产av无码一区二区三区| 日本成人一区二区| 永久免费毛片在线播放不卡| 欧美videossex极品| 国产成人综合视频| 福利网在线观看| 欧美xxxx网站| 色综合伊人色综合网站| 国产成人无码专区| 久久这里只有精品6| 青青草国产免费| 精品国产亚洲一区二区三区| 中文字幕不卡av| 日韩精品一区不卡| 久久综合色鬼综合色| 成人一区二区免费视频| 中文字幕视频精品一区二区三区| 日韩一区视频在线| 国产精品乱码一区二区| 国产精品久99| 亚洲精品mv在线观看| 香港欧美日韩三级黄色一级电影网站| 国产欧美日韩亚洲精品| 18免费在线视频| 欧美三级日韩三级| 一区二区三区四区精品| 91高清免费看| 国产一区二区中文字幕| 中文字幕一区综合| 亚洲成人高清| 欧美成人午夜激情| 国产suv精品一区二区69| 一区二区三区在线观看国产| 香蕉在线观看视频| 亚洲人成久久| 日本免费高清一区| 国产成人午夜性a一级毛片| 色伦专区97中文字幕| 91精品中文字幕| 亚洲精品日产精品乱码不卡| 亚洲熟女乱综合一区二区| 欧美午夜不卡| 精品久久精品久久| 日韩电影大全网站| 日韩在线精品一区| a天堂在线视频| 婷婷夜色潮精品综合在线| 亚洲精品理论片| 日韩精品一卡二卡三卡四卡无卡| 亚洲一区三区| 91成人午夜| 琪琪第一精品导航| 日本高清视频在线观看| 欧美成人免费网站| 日本中文字幕第一页| 亚洲国产精品成人综合| 黄色a级三级三级三级| 一区二区日本视频| 亚洲国产一区二区精品视频| 深夜福利一区| 欧美在线视频播放| 看黄网站在线| 678在线观看视频| 6080国产精品一区二区| 国产精品a成v人在线播放| 国产三级精品视频| 女人扒开腿免费视频app| 亚洲一区欧美激情| 国产精品av免费| 日韩高清一级| 91色在线观看| 欧美无毛视频| 欧美福利视频网站| 92国产在线视频| 精品88久久久久88久久久| 亚洲精品无码久久久久| 亚洲国产成人91porn| 国产精品一区二区亚洲| 97久久超碰国产精品电影| 天天操精品视频| 制服诱惑一区| 国产又粗又猛视频| 亚洲高清免费观看| 极品久久久久久久| 亚洲av无码片一区二区三区| 日韩欧美a级成人黄色| 三级av在线免费观看| av激情综合网| 国产精品人人妻人人爽人人牛| 欧美激情综合| 亚洲美女搞黄| 久久99高清| 国新精品乱码一区二区三区18| 日韩欧乱色一区二区三区在线 | 51精品秘密在线观看| 久久精品国产成人av| 亚洲资源中文字幕| 看免费黄色录像| 国产精品网曝门| 新91视频在线观看| 成人性生交大合| 亚洲综合在线一区二区| 蜜桃视频免费观看一区| 日韩视频免费在线播放| 国产乱码精品| 99精品在线免费视频| 国产精品草草| 国产在线一在线二| 亚洲国产精品尤物yw在线观看| 我想看黄色大片| 久久色.com| 人妻丰满熟妇av无码久久洗澡| 国产成人在线视频网址| 中文字幕色网站| 久久99精品一区二区三区三区| 国产三级日本三级在线播放| 久久精选视频| 手机看片福利永久| 亚洲视频在线一区二区| 国产精品免费无码| 久久精品亚洲一区二区三区浴池| 国产亚洲色婷婷久久99精品91| 国产69精品久久久久毛片| www.欧美com| 国产成人免费av在线| 又色又爽又黄18网站| 国产91综合网| 成人免费网站在线| 人在线成免费视频| 26uuu另类亚洲欧美日本一| 3344国产永久在线观看视频| 韩国三级日本三级少妇99| 国产一线二线在线观看| 久久久之久亚州精品露出| 丁香影院在线| 77777亚洲午夜久久多人| 在线天堂中文资源最新版| 日韩av片永久免费网站| 四虎影视4hu4虎成人| 国产精品中文字幕在线观看| 青草综合视频| 国产精品国模大尺度私拍| 美女视频免费精品| 日韩激情视频| 亚洲中无吗在线| 男人添女人下部视频免费| 一区二区91| 亚洲娇小娇小娇小| 国产成人精品免费网站| 国产精品第七页| 欧美激情中文字幕| 唐朝av高清盛宴| 欧美午夜美女看片| 91麻豆成人精品国产| 日韩精品一区二区三区蜜臀| 免费动漫网站在线观看| 日韩在线观看网址| 变态调教一区二区三区| 国产精品91在线观看| 久久视频社区| 日本一区二区在线| 欧美精品三区| 天天爱天天操天天干| 国产大片一区二区| 免费福利视频网站| 一个色在线综合| 国产黄色免费视频| 精品日韩在线观看| 黄色在线观看网| 欧美黑人巨大精品一区二区| 日韩欧美少妇| 国产成人av一区二区三区| 精品日韩一区| 国产中文字幕二区| 国产专区综合网| 男生草女生视频| 亚洲香蕉伊在人在线观| 中文字幕在线观看国产| 亚洲激情成人网| bt在线麻豆视频| 国产精品男人爽免费视频1| 国产精品2023| 中文字幕成人一区| 久久资源在线| 国产区精品视频在线观看豆花| 国产精品香蕉视屏| 日韩系列欧美系列| 欧美国产激情视频| 国产精品123| 久久午夜精品视频| 精品久久久久久久久久久久久久 | 欧美日韩一区二区三区免费看| 日韩精品在线播放| 蜜桃av中文字幕| 少妇激情综合网| 中文字幕在线官网| 国产精品对白刺激久久久| 欧美激情另类| 熟女人妇 成熟妇女系列视频| 不卡电影免费在线播放一区| 91精品少妇一区二区三区蜜桃臀| 日韩欧中文字幕| 天堂中文在线看| 欧美激情啊啊啊| 国产精品色婷婷在线观看| 一区二区三区免费看| 久久综合图片| 魔女鞋交玉足榨精调教| 黄色一区二区在线| 秋霞网一区二区| 久久久久久久色| 精品人人人人| www在线观看免费| zzijzzij亚洲日本少妇熟睡| 久久久精品99| 日韩欧美成人激情| 色网在线观看| 97超级碰碰| 欧美日韩蜜桃| 久草视频福利在线| 亚洲一区二区三区视频在线| 亚洲国产精品suv| 国精产品一区一区三区有限在线| 成人资源在线| 成人免费毛片在线观看| 成人福利视频在线| 亚洲精品1区2区3区| 日韩麻豆第一页| 成人av集中营| 中文字幕中文字幕一区三区| 国产乱码精品一区二区三区av | 亚洲高清免费观看| av在线不卡观看| 成人羞羞网站入口免费| 国产一线二线三线在线观看| 国产精品五月天| 国产情侣一区二区| 欧美夫妻性生活xx| 欧美日韩精品一区二区三区在线观看| 欧美,日韩,国产在线| 久久综合久久综合九色| 超碰在线免费97| yw.139尤物在线精品视频| 日韩一区二区三区在线看| 国产欧美一区二区三区不卡高清| 国产精品15p| 欧美精品久久久久久久免费| 99久免费精品视频在线观看 | 香蕉成人啪国产精品视频综合网 | 在线国产精品播放| 亚洲精品一区av| av无码久久久久久不卡网站| 久久久精品国产99久久精品芒果| 中文有码在线播放| 欧美特黄级在线| 九色视频在线观看免费播放| 国产成人av在线| japanese国产精品| 亚洲精品乱码久久久久久动漫| 亚洲国产欧美一区二区三区丁香婷| 日韩有码第一页| 国产精品美乳在线观看| 在线精品国产| 国产吞精囗交久久久| 欧美日韩精品一区二区三区 | 日韩精品第二页| 黄色三级中文字幕| 久久久久久电影| 精品欧美在线观看| 国产成人精品综合| 国内在线观看一区二区三区| 亚洲最大成人综合网| 欧美大黄免费观看| jizz亚洲女人高潮大叫| 国产原创中文在线观看| 亚洲视频免费观看| 久久经典视频|