当前位置: 首页 > Web前端 > HTML5

学习了VuedefineAsyncComponentApi,它教会了我什么?

时间:2023-04-05 20:05:16 HTML5

.popup{位置:固定;宽度:100%;顶部:;左边:;高度:100%;背景色:rgba(,,,0.2);显示:弹性;证明内容:居中;对齐项目:居中;}.content{最小宽度:200px;宽度:30%;背景:#fff;高度:200px;填充:10px;border-radius:5px;}input[type="text"],input[type="password"]{border:;大纲:;border-bottom:1pxsolid#eee;宽度:80%;保证金:自动;font-size:0.5em;}button{边框:;顶部边距:50px;背景底色:#8e44ad;颜色:#fff;填充:5px10px;font-size:0.5em;}作者:ApoorvTyagi译者:前端小智来源:dev有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。使用Vue3的DefileAsyncComponent特性允许我们延迟加载组件。说白了,就是创建一个异步组件,只在需要的时候才加载。这是改善初始页面加载的好方法,因为我们的应用程序将以较小的块加载,而不必在页面加载时加载每个组件。在本文中,我们将学习有关defineAsyncComponent的所有知识,并通过一个延迟加载弹出窗口的示例来工作。什么是defineAsyncComponent?constAsyncComp=defineAsyncComponent(()=>newPromise((resolve,reject)=>{resolve({template:'

Iamasync!
'})}))defineAsyncComponent可以接受一个返回的Promise工厂功能。Promise的resolve回调应该在服务端返回组件定义后调用。您还可以调用reject(reason)来指示加载失败。defineAsyncComponent可以从vue导入并使用:import{defineAsyncComponent}from"vue"//简单用法constLoginPopup=defineAsyncComponent(()=>import("./components/LoginPopup.vue"))这是最简单的defineAsyncComponent方法,对于高级用法,defineAsyncComponent可以接受一个对象:constAsyncPopup=defineAsyncComponent({loader:()=>import("./LoginPopup.vue"),//加载异步组件时要使用的组件loadingComponent:LoadingComponent,//加载失败时使用的组件errorComponent:ErrorComponent,//显示loadingComponent之前的延迟|默认值:200(毫秒)delay:1000,//如果提供超时,加载组件的时间超过设置值,会显示错误组件//Defaultvalue:Infinity(即永不超时,单位ms)timeout:3000})基础介绍完了,接下来,我们来打个例子。使用defineAsyncComponent异步加载Popup组件在本例中,我们将使用通过单击按钮触发的登录弹出窗口。我们不需要我们的应用程序在每次加载时都加载此组件,因为只有在用户执行特定操作时才需要它。下面是登录组的实现://LoginPopup.vue.popup{位置:固定;宽度:100%;顶部:;左边:;高度:100%;背景色:rgba(,,,0.2);显示:弹性;证明内容:居中;对齐项目:居中;}.content{最小宽度:200px;宽度:30%;背景:#fff;高度:200px;填充:10px;border-radius:5px;}input[type="text"],input[type="password"]{border:;大纲:;border-bottom:1pxsolid#eee;宽度:80%;保证金:自动;font-size:0.5em;}button{边框:;顶部边距:50px;背景底色:#8e44ad;颜色:#fff;填充:5px10px;font-size:0.5em;}在其他组件中引入:我们只能使用defineAsyncComponent需要时加载(点击按钮时使用v-if切换)这个用法和上面的差不多,不用担心,我们F12打开控制台。如果我们不使用defineAsyncComponent,我们将看到我们的应用程序在页面加载后立即从服务器获取LoginPopup.vue。虽然在此示例中性能问题不那么严重,但如果我们有数十个组件执行此操作,则会对性能产生一些影响。然而,如果我们使用defineAsyncComponent查看同一个标签,我们会注意到当我们的页面加载时,LoginPopup.vue不存在,因为它还没有被加载。但是,如果按钮被切换,我们可以看到它:这有助于我们实现最佳性能。我们只想在页面的初始加载时加载所需的组件。我们的页面加载时通常不需要条件渲染的组件,那么为什么要让我们的应用程序加载它们呢?如何使用异步设置方法?无论我们是否使用defineAsyncComponent异步加载,任何具有异步设置方法的组件都必须用包裹。简而言之,创建一个异步设置函数是我们的一个选项,可以让我们的组件在渲染之前等待一些API调用或其他异步操作。下面是一个异步设置的组件,使用setTimeout()来模拟API调用我们可以将它导入到有或没有defineAsyncComponent的组件中:importLoginPopupfrom'./components/LoginPopup.vue'//constLoginPopup=defineAsyncComponent(()=>import("./components/LoginPopup.vue"))但如果我们希望它在我们的模板中呈现,我们需要将它包装在一个Suspense元素中将等待我们的设置解决,然后再尝试渲染我们的组件。Suspense的一个很好的特性是我们可以使用插槽和模板显示回退内容。回退内容将一直显示到设置函数解析并且我们的组件准备好呈现为止。请注意,v-if已从组件本身移至我们的Suspense组件,因此所有回退都会显示出来。

Loading...

下面是运行结果,你会看到“Loading...”,然后3秒后(硬编码值ofsetTimeout)组件将呈现。默认情况下,我们使用defineAsyncComponent定义的所有组件都是Suspenseable。这意味着如果一个组件在其父链中有Suspense,它将被视为该Suspense的异步依赖。我们组件的加载、错误、延迟和超时选项将被忽略,并由Suspense处理。总结defineAsyncComponent在构建包含许多组件的大型项目时很有用。当我们使用延迟加载组件时,我们可以更快地加载页面,改善用户体验,并最终提高应用保留率和转化率。我很想知道每个人对这个功能的看法。如果您已经在您的应用中使用它,请记得在下面的评论中分享它。~最后,我是小智,我今天要干嘛呢~代码部署后可能存在的bug,无法实时知道。之后为了解决这些bug,我花了很多时间在日志调试上。顺便给大家推荐一个很好用的BUG监控工具Fundebug。原文:https://learnvue.co/2021/06/l...与梦想交流,干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗小智。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。