_
2023/8/31 08:27:411021

这节课我们来学习异步组件,我们之前学的全局组件和局部组件其实都属于同步组件,那么今天我们学习的内容异步组件,他和我们和同步组件又什么区别呢。我们今天一起来看一下。

同步组件写法

我们先来回顾一下同步组件的写法。

const app = Vue.createApp({
    data() {
      return {
        message: "hello world!"
      }
    },
    template: `<div><tongBuComponent/></div>`
  })

  app.component("tongBuComponent",{
    template:`<div>hello vue</div>`
  })
  const vm = app.mount("#app")

这样就是一个同步组件的写法。同步组件就是一定能我们定义号了,就可以直接使用。

异步组件

异步组件就是在调用组件时他不会直接立即渲染组件,它需要等待一些业务逻辑执行完之后才会执行组件渲染到页面上。我们先来看一下异步组件怎么来实现,看一下它的执行效果。

app.component('async-component',Vue.defineAsyncComponent(()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve({
                template:`<div>这是一个异步组件</div>`
            })
        },3000)
    })

}))

在代码中我使用了Promise和setTimeout延迟执行来模拟来一个异步执行,我们运行来看一下效果。我们会发现组件需要等待三秒才渲染出来,这三秒就是在模拟执行异步逻辑的时间, 等待逻辑执行完成之后使用resolve返回了一个组件。

在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件这节课我使用到了Promise 这是es6中的语法,主要用于处理异步回掉问题, 大家不熟悉的话可以去了解一下,另外在我们日常工作中一般还是使用同步组件较多,异步组件使用比较少,大家只需要先了解一下异步组件的写法,知道有异步组件的这个东西就行了,今后遇到了再研究。

视频讲解