最后
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
最后写上我自己一直喜欢的一句名言:
世界上只有一种真正的英雄主义就是在认清生活真相之后仍然热爱它
在本文中,我们将学习有关defineAsyncComponent
的所有知识,并学习一个懒加载弹出窗口的例子。
defineAsyncComponent 是啥?
const AsyncComp = defineAsyncComponent(
() =>
new Promise((resolve, reject) => {
resolve({
template: ‘
})
})
)
defineAsyncComponent
可以接受一个返回 Promise
的工厂函数。Promise 的 resolve
回调应该在服务端返回组件定义后被调用。你也可以调用 reject(reason)
来表示加载失败。
defineAsyncComponent
可以从 vue 中导入,并使用:
import { defineAsyncComponent } from “vue”
// simple usage
const LoginPopup = defineAsyncComponent(() => import(“./components/LoginPopup.vue”))
这是defineAsyncComponent
的最简单方法,对于高阶用法,defineAsyncComponent
可以接受一个对象:
const AsyncPopup = defineAsyncComponent({
loader: () => import(“./LoginPopup.vue”),
// 加载异步组件时要使用的组件
loadingComponent: LoadingComponent,
// 加载失败时要使用的组件
errorComponent: ErrorComponent,
// 在显示 loadingComponent 之前的延迟 | 默认值:200(单位 ms)
delay: 1000,
// 如果提供了 timeout ,并且加载组件的时间超过了设定值,将显示错误组件
// 默认值:Infinity(即永不超时,单位 ms)
timeout: 3000
})
基础已经介绍完了,接着,我们来做个例子。
使用 defineAsyncComponent 异步加载 Popup 组件
在这个例子中,我们将使用一个由点击按钮触发的登录弹框。
我们不需要我们的应用程序在每次加载时都加载这个组件,因为只有在用户执行特定的动作时才需要它。
下面是 login 组件的实现:
// LoginPopup.vue
Login to your account
Log in
在其它组件中导入它:
<button @click=“show = true”> Login
我们可以使用 defineAsyncComponent
,只在需要的时候加载它(按钮被点击时使用v-if
来切换)。
<button @click=“show = true”> Login
这个用法看起来和上面的差不多,不急,我们 F12
打开控制台。
如果我们不使用defineAsyncComponent
,一旦我们的页面加载,我们就会看到我们的应用程序从服务器上获得LoginPopup.vue
。虽然在这个例子中,性能问题不那么严重,但如果我们有几十个组件这样做,性能上多多少少还是有影响的。
然而,如果我们使用defineAsyncComponent
查看同一个标签,会注意到,当我们的页面加载时,LoginPopup.vue
是没有的,这是因为它还没有被加载。
但,如果切换按钮,我们就可以看到它了:
文末
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
前端面试题汇总
JavaScript
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
性能
linux
前端资料汇总