Vue defineAsyncComponent

134 阅读1分钟

当加载一个页面,页面的一个组件体积较大,并且可以按需加载,那么就可以使用按需加载对应的组件文件。Vue提供了defineAsyncComponent来处理组件按需加载,当使用了defineAsyncComponent来引入组件,这个组件的文件是和页面文件分块,是一个独立的文件,当页面显示这个组件时才加载这个文件。

效果说明

当使用了defineAsyncComponent打包后的文件如下:

image.png

可以看到HelloWorld组件是打包为单独的文件。

当页面加载时,没有使用组件按需加载时,浏览器控制台查看时这样的:

Image.png

而当使用了组件按需加载:

Image.png

可以看到,页面文件index少了1KB,这1KB正是HelloWord组件。当页面显示HelloWorld组件时,才去加载HelloWorld组件:

Image.png

示例代码

<script setup>
  import {defineAsyncComponent, ref} from 'vue';
  // import HelloWorld from './components/HelloWorld.vue'

  const HelloWorld = defineAsyncComponent(() => import('./components/HelloWorld.vue'))

  const visible = ref(false);

  function handleClick() {
    visible.value = true;
  }
</script>

<template>
  <button @click="handleClick">click</button>
  <HelloWorld v-if="visible" msg="Vite + Vue"/>
</template>

完整代码 stackblitz.com/edit/vitejs…

Vue2

Vue2的异步组件的使用,参考 v2.cn.vuejs.org/v2/guide/co…