当前位置: 首页 > news >正文

vue3中动态引入组件并渲染组件

在开发中 有时会在打包或者各种可能的情况下 报错或警告提示 模块化打包的问题,
我们需要动态引入组件并渲染组件时,
方法1: 可以使用import引入结合component标签使用
如下举例

import { ref, markRaw } from 'vue'
const childrenComponent = ref();
onMounted(() => {//举例引入一个组件childrenComponent.vueimport('**/..**../childrenComponent.vue').then((module) => {childrenComponent.value = markRaw(module.default);// 确保该赋值操作不会反复触发重新渲染});
});

可以使用component标签和:is 属性来动态创建和使用组件。

  <component :is="childrenComponent" v-if=" childrenComponent"/>

方法2: vue3的defineAsyncComponent

defineAsyncComponent 是 Vue 3 提供的一个功能,它允许你定义一个异步组件。这意味着组件的加载会被延迟,直到它真正需要被渲染到页面上时才会加载。这对于大型应用来说特别有用,因为它可以帮助减小初始加载时间,实现按需加载。

js中

import { defineAsyncComponent } from 'vue';const AsyncComp = defineAsyncComponent(() =>new Promise((resolve, reject) => {// 模拟异步操作setTimeout(() => {// 模拟从服务器动态导入组件import('./children.vue').then(component => {resolve(component);});}, 1000);})
);export default AsyncComp;

vue文件中
你可以像使用普通组件一样 import引入js 后使用 AsyncComp组件:

<template><div><AsyncComp /></div>
</template><script>
import AsyncComp from './path/to/AsyncComp.js';export default {components: {AsyncComp}
}
</script>

defineAsyncComponent 可以接受一个返回 Promise 的工厂函数,如上例所示。
你也可以使用 import() 语法来定义组件:

import { defineAsyncComponent } from 'vue';const AsyncComp = defineAsyncComponent(() =>import('./children.vue')
);

在这个例子中,children.vue 会在需要渲染 AsyncComp 组件时才被加载。
这种方式利用了原生的 ES6 import() 函数来动态导入组件,当异步组件被解析时,Vue 会自动处理组件的注册和渲染。

高级用法
defineAsyncComponent 还接受一个选项对象,允许你配置一些高级特性,比如加载中的组件、错误处理、延迟加载等:

const AsyncComponent = defineAsyncComponent({loader: () => import('./components/AsyncComponent.vue'),loadingComponent: LoadingComponent,errorComponent: ErrorComponent,delay: 200,timeout: 3000
});
  • loader: 返回一个 Promise,该 Promise 应该 resolve 组件定义。
  • loadingComponent: 在组件加载过程中渲染的组件。
  • errorComponent: 如果加载组件失败,则渲染此组件。
  • delay:在显示加载组件之前的延迟时间(毫秒)。
  • timeout: 如果加载组件的时间超过这个时间,则显示错误组件(毫秒)。

注意事项

  • 异步组件对于提高应用的加载速度和性能非常有用,但是需要注意管理它们的加载状态和错误处理。
  • 在使用异步组件时,考虑到组件的加载时间,可能需要为用户提供一些反馈,比如加载指示器。
  • 使用 defineAsyncComponent 时,确保正确处理错误情况,避免应用崩溃。

http://www.mrgr.cn/news/39149.html

相关文章:

  • 电子信息工程职称评审流程有哪些?
  • 点餐小程序实战教程13餐桌管理
  • IDEA关联Tomcat
  • 【算法】反向传播算法
  • 【高效管理集合】并查集的实现与应用
  • 【IoT-NTN】系统消息SIB32信令分析
  • Matlab|考虑阶梯式碳交易与供需灵活双响应的综合能源系统优化调度
  • 985官宣:19名本科生,获国自然项目!
  • C语言-Linux进程间通信方式
  • Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)
  • 概率论原理
  • 如何理解矩阵的复数特征值和特征向量?
  • 第L4周:机器学习|K-近邻算法模型
  • Flash与Cache
  • 迈威通信闪耀工博会,以创新科技赋能工业自动化
  • AI新掌舵:智享AI直播系统:直播界的新浪潮还是真人主播的终结者?
  • Cholesky分解
  • 谷歌地图 | 3D 地图新功能:开发更简单,体验更丰富
  • 联想ThinkPad X13:强悍性能与轻薄便携的完美融合
  • 文件防泄密措施有哪些|6个技巧有效防止文件泄密!