异步加载组件

nothing-sy2022-9-22vue3

asyncComponent

vue3 提供了 defineAsyncComponent方法,用于页面需要渲染的时候,才对该组件内容进行加载 这与vue-router的路由动态加载不同,vue-router通过()=>import('xxx.vue')将整个路由页面动态加载,这里不要使用defineAsyncComponent,因为本身路由就是动态加载的,会出现问题。

路由组件动态加载后,其包含的所有子组件都会被下载,如果需要将这些子组件再异步加载,就需要用到 defineAsyncComponent, 基础用法如下:

<script setup lang="ts">
import { defineAsyncComponent,Ref,ref } from 'vue'

const AsyncComp = defineAsyncComponent(() =>
  import('./components/Common.vue')
)
let type: Ref<1|2> = ref(2)

/**当渲染条件达成的时候,common.vue文件才会从服务器加载 */
const change = () => {
type.value = type.value === 1 ? 2 : 1
}

</script>

<template>

  <div class="demo">
    <el-button @click="change">异步加载</el-button>
    <AsyncComp v-if="type === 1"></AsyncComp>
  </div>
</template>

注意,defineAsyncComponent接受的是一个返回promise的回调函数,所以我们一般结合import()来动态加载组件

Last Updated 2025-02-20 03:36:19