返回介绍

一、异步组件 defineAsyncComponent

发布于 2024-04-04 21:12:39 字数 1991 浏览 0 评论 0 收藏 0

使用 defineAsyncComponent 方法定义异步组件

  • component 选项被重命名为 loader
  • 与 2.x 不同,Loader 函数本身不再接收 resolvereject 参数,且必须返回一个 Promise。
// 2.x 版本
const oldAsyncComponent = (resolve, reject) => {
  /* ... */
}
        
// 3.x 版本
const asyncComponent = defineAsyncComponent(
  () =>
  new Promise((resolve, reject) => {
    resolve({
    template: '<div>I am async!</div>'
    })
    // 也可以调用 reject(reason),来表示加载失败
    /* ... */
  })
)

Vue 2.x

异步组件是通过将组件定义为返回 Promise 的函数来创建的,如:

const asyncModal = () => import('./Modal.vue')

或者,对于带有选项的更高阶的组件语法:

const asyncModal = {
  component: () => import('./Modal.vue'),
  delay: 200,
  timeout: 3000,
  error: ErrorComponent,
  loading: LoadingComponent
}

Vue 3.x

在 Vue 3 中,由于函数式组件被定义为纯函数,因此异步组件需要通过将其包裹在 defineAsyncComponent 方法中来定义:

import { defineAsyncComponent } from 'vue'
import ErrorComponent from './components/ErrorComponent.vue'
import LoadingComponent from './components/LoadingComponent.vue'

// 不带选项的异步组件
const asyncModal = defineAsyncComponent(() => import('./Modal.vue'))

// 带选项的异步组件
const asyncModalWithOptions = defineAsyncComponent({
  loader: () => import('./Modal.vue'),
  delay: 200,
  timeout: 3000,
  errorComponent: ErrorComponent,
  loadingComponent: LoadingComponent
})

与 Suspense 一起使用

异步组件在默认情况下是可挂起的。这意味着如果它在父链中有一个 <Suspense> ,它将被视为该 <Suspense> 的异步依赖。在这种情况下,加载状态将由 <Suspense> 控制,组件自身的加载、错误、延迟和超时选项都将被忽略。

通过在其选项中指定 suspensible: false,异步组件可以退出 Suspense 控制,并始终控制自己的加载状态。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文