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

embedded/2024/9/30 2:15:50/

在开发中 有时会在打包或者各种可能的情况下 报错或警告提示 模块化打包的问题,
我们需要动态引入组件并渲染组件时,
方法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.ppmy.cn/embedded/119673.html

相关文章

文件传输工具 | 闪电藤 v2.5.5 绿色版

软件简介 闪电藤是一款基于LocalSend二次开发的局域网文件传输工具。它特别针对中国用户的使用习惯&#xff0c;对UI交互进行了重新设计&#xff0c;并在功能上进行了增强和删减。这款工具的特点包括极简无广告的界面&#xff0c;无需登录即可使用&#xff0c;能够自动连接同一…

OpenCV图像文件读写(3)统计多页图像文件中的页面数量函数imcount()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 返回给定文件中的图像数量。 imcount 函数将返回多页图像中的页面数量&#xff0c;对于单页图像则返回 1。 函数原型 size_t cv::imcount (cons…

cpu路、核、线程、主频、缓存

路&#xff1a;主板插口实际插入的 CPU 个数&#xff0c;也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如&#xff0c;一台服务器可能有2路或4路插槽&#xff0c;这意味着它最多可以安装2个或4个物理处理器。 核&#xff1a;单块 CPU 上面能…

微商伙伴软件功能介绍

微商伙伴软件功能介绍 这款软件名为微商伙伴 MICRO BUSINESS PARTNER 9.0&#xff0c;具有以下功能&#xff1a; 一、新增功能 新消息提醒功能&#xff08;所有消息完美接收&#xff0c;包括红包消息&#xff09;。主程序升级为 6.5.5 版本&#xff08;图片编辑/小程序/大视…

低代码平台中的宿主概念解析与字典、角色、岗位及权限管理

随着数字化转型的加速&#xff0c;低代码平台逐渐成为企业构建应用程序的重要工具。在这些平台中&#xff0c;宿主的概念尤为重要&#xff0c;它为用户在字典、角色、岗位等方面提供了更为灵活和清晰的定义。 什么是宿主&#xff1f; 在低代码平台中&#xff0c;宿主可以被理…

X86下一文带你构建Apollo9.0运行环境(基于Ubuntu20.04避坑版)

X86下一文带你构建Apollo9.0运行环境基于Ubuntu20.04避坑版 前言准备安装基础软件1.安装Docker19.03安装Nvidia驱动安装配置Nvidia container toolkit 下载Apollo源码&#xff08;笔者下载的是releases下9.0.0版本&#xff0c;大家可以参考&#xff09;编译Apollo9.0下载资源包…

BERT训练之数据集处理(代码实现)

目录 1读取文件数据 2.生成下一句预测任务的数据 3.预测下一个句子 4.生成遮蔽语言模型任务的数据 5.从词元中得到遮掩的数据 6.将文本转化为预训练数据集 7.封装函数类 8.调用 import os import random import torch import dltools 1读取文件数据 def _read_wiki(data_d…

如何借助Java批量操作Excel文件?

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ 前言 | 问题背景 在操作Excel的场景中&#xff0c;通常会有一些针对Excel的批量操作&#xff0c;批量的意思一般有两种&#xff1a; 对批量的Excel文件进行操作。如导入多个Excel文件…