解密vue异步组件

1、异步组件用法

js 复制代码
Vue.component(  
    'async-webpack-example',   
    () => import('./my-async-component')  
)

2、使用场景

如果我们需要展示某个产品的信息,产品关联的tab页面有20个,使用异步组件就使得代码很简单,减少了组件的注册

js 复制代码
<template> 
   <el-tabs v-model="activeName" @tab-click="handleClick"> 
       <el-tab-pane label="基本信息" name="first"></el-tab-pane> 
       <el-tab-pane label="配置信息" name="second"></el-tab-pane> 
       <el-tab-pane label="角色信息" name="third"></el-tab-pane> 
       <el-tab-pane label="部门信息" name="fourth"></el-tab-pane> 
       ...
       <el-tab-pane label="其他信息" name="twenty"></el-tab-pane>
    </el-tabs> 
    
    <async-webpack-example />
</template> 
<script> 
  export default { 
      data() { return { activeName: 'second' }; }, 
      methods: { 
        handleClick(path) { 
           Vue.component(  
                'async-webpack-example',   
                () => import('./my-async-component/'+ path)  
            )
        } 
      } 
   }; 
 </script>

3、源码

  1. 使用defineAsyncComponent定义异步组件,它返回一个包装了异步加载逻辑的组件选项对象。

  2. 创建一个占位符组件,在异步组件加载完成前用于渲染。

  3. 在占位符组件的渲染函数中处理异步加载逻辑,返回一个Suspense组件用于展示加载状态。

  4. 使用import()动态导入组件模块,返回一个 Promise 对象。

  5. 创建异步组件的渲染函数,根据组件的选项对象创建。

  6. 替换占位符组件,将异步组件渲染到占位符组件的位置。

4、编译原理

疑问:webpack编译是按需加载,也就是我们用到了哪些代码,才会进行编译打包。当我们使用异步组件的时候,path是一个变量,如何做到把这些路径的文件提前编译呢?

带着这样的疑问我们来看看 Vue.component 的编译代码吧

欢迎关注我的前端自检清单,我和你一起成长

相关推荐
从文处安6 小时前
「九九八十一难」组合式函数到底有什么用?
前端·vue.js
用户11489669441057 小时前
VUE3响应式原理——从零解析
vue.js
用户83040713057017 小时前
SPA 首屏加载速度慢怎么解决?
vue.js·webpack
一枚前端小姐姐7 小时前
低代码平台表单设计系统技术分析(实战三)
前端·vue.js·低代码
SuperEugene7 小时前
从 Vue2 到 Vue3:语法差异与迁移时最容易懵的点
前端·vue.js·面试
Leon8 小时前
新手引导 intro.js 的使用
前端·javascript·vue.js
Forever7_8 小时前
仅用一个技巧,让 JavaScript 性能提速 500%!
前端·vue.js
青屿ovo10 小时前
Vue前端页面版本检测解决方案
前端·vue.js
apollo_qwe12 小时前
深入解析Vue的mixins与hooks:复用逻辑的两种核心方式
vue.js
_AaronWong13 小时前
Vue3+Element Plus 通用表格组件封装与使用实践
前端·javascript·vue.js