精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

亚洲精品国产精品久久清纯直播| 久久综合九色综合97婷婷女人| 色99之美女主播在线视频| 黄色手机在线视频| 97影院秋霞午夜在线观看| 国产麻豆日韩欧美久久| 伊人伊成久久人综合网站| 亚洲免费看av| 影音先锋在线视频| 成人精品国产福利| 国内精品400部情侣激情| 亚洲av无码国产精品久久| 天堂久久午夜av| 亚洲乱码中文字幕| 欧美日韩高清一区二区不卡 | 久久久无码中文字幕久...| av高清一区二区| 欧美日韩18| 亚洲摸下面视频| 日韩av影视大全| 国产福利电影在线播放| 国产亲近乱来精品视频| 国产91视觉| 这里只有精品999| 欧美精品1区| 亚洲人成自拍网站| 精品人妻二区中文字幕| 亚洲第一会所| 亚洲成人动漫在线观看| 一本久道久久综合| 欧美日韩伦理片| 国产一区在线精品| 国产国产精品人在线视| 久久中文字幕在线观看| av伊人久久| 亚洲精品一区二区精华| 天天做天天干天天操| 一级毛片久久久| 亚洲欧洲综合另类| 亚洲精品国产精品久久| 无码精品视频一区二区三区 | 99在线观看| 国产精品美女久久久久av爽| 亚洲欧美一级二级三级| 在线观看久久av| 亚洲天堂小视频| 祥仔av免费一区二区三区四区| 亚洲一区中文日韩| 潘金莲一级淫片aaaaa免费看| 天堂a中文在线| 国产精品538一区二区在线| 国产在线观看精品| 国产亚洲欧美日韩高清| 国产精品乱看| 欧美激情在线狂野欧美精品| 九九精品在线播放| 91人人澡人人爽人人精品| av在线私库| 亚洲尤物在线视频观看| 黄色影视在线观看| 欧美一级二级三级区| 国产日本亚洲高清| 鲁丝一区二区三区免费| 噜噜噜久久,亚洲精品国产品| 韩国女主播成人在线| 国产欧美在线播放| 一区二区三区日| 奇米亚洲午夜久久精品| 国产精品福利网| 日韩欧美在线观看免费| 久久精品亚洲| 国产91色在线免费| 在线免费观看国产精品| 噜噜噜91成人网| 欧美一级电影久久| 中文字幕精品三级久久久| 雨宫琴音一区二区在线| 97视频在线播放| 黑人精品无码一区二区三区AV| 国产精品久久久免费| 欧美在线观看视频| 日本中文字幕在线| 日韩电影在线一区二区三区| 国产精品一区久久久| 影音先锋国产在线| 国产一区二区三区不卡在线观看| 91免费视频网站| 伊人久久一区二区| 国产一区二区在线观看免费| 亚洲综合视频1区| 丰满大乳国产精品| 91麻豆精品一区二区三区| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 国产精品综合网站| 国产成人免费看一级大黄| 国产成人亚洲精品青草天美| 国产suv一区二区三区88区| 理论片在线不卡免费观看| 免费看特级毛片| 在线日本成人| 日韩av片免费在线观看| 91theporn国产在线观看| 国产福利一区二区| 蜜桃视频日韩| 韩国三级在线观看久| 中文字幕在线观看不卡视频| 国产在线视频在线| 日本蜜桃在线观看视频| 欧美猛男男办公室激情| 蜜臀aⅴ国产精品久久久国产老师| 国产在线播放精品| 永久555www成人免费| 免费人成视频在线| 久久综合影视| 91丨九色丨国产在线| 伦理片一区二区三区| 亚洲精品成a人| 欧美日韩中文不卡| 国产精品一区高清| 9.1国产丝袜在线观看 | 免费在线观看日韩欧美| 久久精品国产美女| 欧美黄色视屏| 精品国产1区| 精品99一区二区三区| 久久久久亚洲AV成人无在| 国产精品综合| 高清日韩一区| 综合久久2019| 在线播放欧美女士性生活| 免费看91的网站| 嫩草成人www欧美| 久久亚洲一区二区| 免费v片在线观看| 精品国产乱码久久久久久图片 | 婷婷一区二区三区| 涩视频在线观看| 欧美有码视频| 亚洲在线第一页| 黄网站视频在线观看| 欧美日免费三级在线| 国产精品成人无码免费| 久久精品欧洲| 视频一区二区三区免费观看| 日韩高清成人| 在线日韩欧美视频| 亚洲熟妇无码久久精品| 国产欧美一二三区| 777视频在线| 日韩大片在线播放| 成人www视频在线观看| 黄色网页在线播放| 日韩视频免费观看高清完整版 | 91精品视频大全| 国产又粗又长又爽又黄的视频| 成人免费网站www网站高清| 亚洲人成在线电影| 中文字幕无线码一区| 国产精品久久久久久久久免费丝袜 | 青青草视频在线免费直播| 日韩精品一区二区三区蜜臀| 国产精品美女毛片真酒店| 91免费视频网| 中文字幕网av| 亚洲精品网址| 国产精品国产三级欧美二区| 精品捆绑调教一区二区三区| 亚洲人成电影网站色xx| 中文字幕久久熟女蜜桃| 17c精品麻豆一区二区免费| 国内av一区二区| 在线看片一区| 欧美日韩免费观看一区| 日韩专区视频网站| 欧美激情日韩图片| 男同在线观看| 4438x亚洲最大成人网| 久久国产精品波多野结衣av| 99视频超级精品| 亚洲黄色a v| 欧美一区视频| 欧美日韩在线综合| 欧美人与性动交α欧美精品| 亚洲三级电影在线观看| 色噜噜狠狠一区二区三区| 91成人福利社区| 18性欧美xxxⅹ性满足| 青青久草在线| 欧美人狂配大交3d怪物一区| 久久亚洲av午夜福利精品一区| 久久综合精品国产一区二区三区 | 日本一区二区三区中文字幕| 欧美另类精品xxxx孕妇| 国产一级网站视频在线| 欧美xxxxxxxxx| 一级特黄免费视频| 亚洲一区二区三区爽爽爽爽爽 | 亚洲精品手机在线观看| 99这里有精品| 最新欧美日韩亚洲| 私拍精品福利视频在线一区| 成人av色在线观看| 亚洲精品日产| 欧美日韩国产成人高清视频| 国产二区在线播放| 亚洲国产古装精品网站| 一卡二卡三卡在线观看| 色综合久久99| 亚洲一区二区91| 日韩一区中文字幕| 在线观看福利片| 国产99精品在线观看| 精品久久久久久久无码| 一区二区激情| 成人黄色大片网站| 午夜激情久久| 色姑娘综合av| 亚洲精品**不卡在线播he| 成人18视频| 国产麻豆一区二区三区| 国产精品久久久久久婷婷天堂| 九色porny丨首页入口在线| 欧美成人午夜免费视在线看片| 一区二区三区视频网站| 亚洲性视频网站| 亚洲香蕉中文网| 国产精品乱战久久久| 91九色国产视频| 国产一区二区三区四区五区3d | 久久免费少妇高潮99精品| 国产精品二三区| 日本一卡二卡在线播放| 久久午夜色播影院免费高清| 给我免费观看片在线电影的| 成人免费av在线| 天天躁日日躁狠狠躁av麻豆男男| 国产精品一区二区久久不卡| 亚洲国产欧美91| 国产一区二区三区黄视频| 中文字幕一区久久| 激情久久五月天| 肉色超薄丝袜脚交| 国内精品久久久久影院一蜜桃| 成人性生交免费看| 久久精品国产久精国产| 毛片毛片毛片毛| 国产毛片精品一区| avtt中文字幕| www.成人在线| 国产精品300页| 国产亚洲美州欧州综合国| 久久成人激情视频| 国产精品免费aⅴ片在线观看| 大吊一区二区三区| 国产精品国产三级国产普通话蜜臀| 亚洲aaa视频| 亚洲人成亚洲人成在线观看图片 | 欧美性高潮床叫视频| 亚洲欧美综合另类| 在线观看不卡一区| 怡红院男人的天堂| 欧美一卡二卡三卡| 国产精品三级网站| 午夜伦理福利在线| 国产成人精品免高潮在线观看| 亚洲第一会所| 成人性生交大片免费看视频直播 | 欧洲黄色一区| 亚州av一区二区| 性欧美gay| 91色在线观看| 久久a爱视频| 亚洲成人av动漫| 午夜欧美精品| 日本精品久久久久中文字幕| 极品销魂美女一区二区三区| 日本精品一二三| 久久久久亚洲综合| 黑人操日本美女| 天天综合天天做天天综合| 亚洲精品一区二三区| 欧美一二区视频| 日本在线丨区| 久久国产精品久久久久久| 成人国产电影在线观看| 国产一区玩具在线观看| 久久影院资源站| 中文字幕精品一区日韩 | 成人免费视频久久| 国产成人精品亚洲777人妖| 中文字幕在线观看网址| 综合色中文字幕| 日韩av在线天堂| 欧美日韩一区二区三区四区| 手机在线精品视频| 三级精品视频久久久久| 国产无遮挡又黄又爽| 久久综合九色综合欧美狠狠| 26uuu国产| 中文字幕+乱码+中文字幕一区| 久久亚洲国产成人精品性色| 欧美无人高清视频在线观看| 熟妇人妻系列aⅴ无码专区友真希| 中文字幕精品av| 美女高潮在线观看| 亚洲aa中文字幕| 欧美三级三级| 18岁网站在线观看| 国产v日产∨综合v精品视频| 一本在线免费视频| 日韩欧美亚洲成人| www.看毛片| 久久精品国产一区| 影视一区二区三区| 久久久99爱| 亚洲黄网站黄| 一级全黄裸体片| 亚洲视频一区在线| 这里只有精品999| 亚洲理论在线a中文字幕| a级片免费在线观看| 亚洲一区二区三区sesese| 区一区二视频| 欧美性猛交久久久乱大交小说| av一二三不卡影片| 国产精品成人免费观看| 777欧美精品| 三区四区在线视频| 国产精品美女免费看| 欧美人与拘性视交免费看| 日韩av高清在线看片| 成人激情小说乱人伦| 久久精品www| 欧美变态口味重另类| 深夜国产在线播放| 97se视频在线观看| 欧美1级日本1级| 精产国品一二三区| 亚洲精品免费在线| 国产哺乳奶水91在线播放| 久久精品中文字幕电影| 未满十八勿进黄网站一区不卡| 亚洲视频欧美在线| 久久国产剧场电影| 伊人影院综合网| 欧美色图第一页| 久热国产在线| 亚洲一区二区少妇| 欧美艳星kaydenkross| 91精品国产综合久久久蜜臀粉嫩 | 大桥未久av一区二区三区中文| 成人观看免费视频| 精品少妇一区二区三区在线播放 | 天天躁日日躁狠狠躁av| 亚洲自拍另类综合| 无码精品视频一区二区三区| 日本精品视频网站| 欧美电影《轻佻寡妇》| 在线成人免费av| 午夜精品久久久久影视| 男人的天堂在线| 国产欧美日韩91| 欧美日韩精品一本二本三本| 成人性生活免费看| 日韩欧美亚洲一二三区| 成人动漫在线播放| 91精品啪aⅴ在线观看国产| 国产字幕视频一区二区| 国产三级国产精品| 欧美女孩性生活视频| 欧美亚洲天堂| 蜜桃av噜噜一区二区三区| 男男视频亚洲欧美| 妺妺窝人体色www聚色窝仙踪| 亚洲精品99999| 日本综合视频| av片在线免费| 久久男人中文字幕资源站| 中国一级特黄视频| 欧美激情欧美激情在线五月| 久久不卡国产精品一区二区 | 伊人久久久久久久久久久久| 日韩资源在线观看| 国产成人福利av| 中文字幕第36页| 亚洲国产精品久久不卡毛片| 国产在线观看高清视频| 亚洲综合色av| 日韩中文欧美在线| 国产真人真事毛片| 国产亚洲精品久久久久久牛牛| 日韩一级淫片| 超碰在线97免费| 午夜伦欧美伦电影理论片| 午夜免费视频在线国产| 九色综合日本| 国产精品一区二区果冻传媒| 久久久999久久久| 久久人91精品久久久久久不卡| 日韩系列欧美系列|