异步引入组件

本文介绍了Vue中的defineAsyncComponent函数用于异步引入组件,并通过Suspense标签管理加载过程。当子组件数据量大导致延迟显示时,使用此方法可以保证父组件的即时渲染。
摘要由CSDN通过智能技术生成

defineAsyncComponent 函数:用于异步引入组件。

Suspense 标签:异步组件加载时,显示的默认内容。

应用场景:当子组件的数据量较大,导致父组件延迟显示时使用。

语法格式

异步引入组件:

import { defineAsyncComponent } from 'vue';
const Child = defineAsyncComponent(() => {
  return import('../components/Child');
});

设置默认内容:

<Suspense>
  <!-- 如果组件加载成功,就显示 default 中的内容 -->
  <template v-slot:default>
    <Child></Child>
  </template>
  <!-- 如果组件正在加载中,就显示 fallback 中的内容 -->
  <template v-slot:fallback>
    <h3>加载中,请稍等...</h3>
  </template>
</Suspense>

异步引入组件:

一、子组件:创建 Child 子组件。

<template>
  <div style="background-color: red;padding: 10px;">
    <h3>我是 Child 子组件</h3>
  </div>
</template>

二、父组件:通过 defineAsyncComponent 异步引入组件。

<template>
  <h3>我是父组件</h3>
  <!-- 使用异步组件 -->
  <Child></Child>
</template>

<script setup>
// 引入 defineAsyncComponent 函数
import { defineAsyncComponent } from 'vue';
// 动态引入【异步引入】
const Child = defineAsyncComponent(() => {
  return import('../components/Child');
});
</script>

三、最终效果。

:在控制台的 Network 中,将网络调成 Slow 3G 网络。刷新页面后,就会发现子组件不会影响父组件的显示啦。 

原创作者:吴小糖

创作时间:2024.3.26

 

小吴吴吴呀
关注 关注
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vue -- 异步组件引入
King Saj
06-02 585
异步组件加载
Vue 同步组件异步组件的差别
爱酸的博文
08-18 1010
vue 同步、异步组件的差别
vue同步父子组件异步父子组件的生命周期顺序问题
12-12
关于vue组件引入方式有两种 一、 同步引入 例子: import Page from '@/components/page' 二、异步引入 例子:const Page = () => import('@/components/page') 或者: const Page = resolve => require(['@/components/page'], page) 两种引入方式的不同之处在于: 同步引入时生命周期顺序为:父组件的beforeMount、created、beforeMount –> 所有子组件的beforeMount、created、beforeMount –> 所有子组
vue中的define函数
weixin_64562561的博客
08-21 505
这个宏在简单的组件中几乎用不到,但对于一些复杂的组件非常有用,尤其是这个特性与泛型组件一起使用。defineEmits类似于组件上的@click、@change ......等固有方法(子组件需要一个或多个自定义方法,父组件提供给他),可以根据子组件提供的值修改父组件。在选项式api中组件有name等一些属性,其他属性props,emits等都有相应的define方法,这个也有。使用props时,在父组件改变传入的值,子组件改变不不了,这时候就要用到defineModel了。子组件的属性和方法,
vue 异步组件实现按需加载
Jinmy的博客
09-30 5177
 当build打包后,app.js过大的时候,可以考虑用异步组件的方式。 import HomeHeader from "./components/Header"; import HomeSwiper from "./components/Swiper"; import HomeIcons from "./components/Icons"; import HomeRecommend from...
Vue项目中异步组件引入使用
Niucode的博客
04-26 664
Vue项目中异步组件引入使用
Vue——18——组件
x1037490413的博客
07-05 207
1.组件的出现是为了拆分Vue实例的代码量的,能够让我们以不同的组件来规划不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可 2.组件化和模块化的不同 模块化:是从代码逻辑的角度进行划分的,方便代码分层开发,保证每个功能模块的职能单一 组件化:是从UI界面的角度进行划分的,前端组件化方便UI组件的重用 文章目录一:创建组件:1.方法一:2.方法二3.私有组件二:组件中的data1.为什么组件的data必须是一个function 一:创建组件: 1.方法一: <!DOCTYPE ht
Vue3 异步组件defineAsyncComponent
秋秋小事
03-26 1030
在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件。Vue 提供了defineAsyncComponent方法来实现此功能。以上四段代码分别对应了四个文件,需要异步加载的子组件、子组件加载错误时的页面,子组件加载中的loading页面,以及使用异步组件的父组件。以上三个文件,以此为需要加载的全局异步组件、main函数、使用全局异步组件的vue文件。单文件中加载全局异步组件。,单文件中异步加载组件
react动态路由、异步组件
weixin_43182021的博客
02-19 1207
一、动态路由 列表组件 &lt;Link key={index} to={'/detail/' + item.get('id')}&gt;&lt;/Link&gt; 路由配置 &lt;Route path='/detail/:id' exact component={Detail}&gt;&lt;/Route&gt; 详情组件获取 id this.props.match.p...
Vue路由中引入组件Component的三种方式
weixin_44153063的博客
04-15 1万+
一 普通引入方式 import 组件名 from ‘组件路径’ 如 import login from ‘@/components/login’ 优点: 易理解, 缺点:webpack在打包的时候会把整个路由打包成一个js文件,如果页面一多,会导致这个文件非常大,加载缓慢 二 Vue异步组件技术 component: (resolve) => require(['@/views/login/login'], resolve) 三 使用动态的import( )语法(推荐使用) compone
vue 异步加载组件
梦寻汝的博客
01-05 654
当页面引入多个组件并且有默认不展示的组件则可以进行异步加载(引入组件不进行初步渲染,只有需要的时候才加载)首先引入 defineAsyncComponent。然后引入组件 组件名自定义(comB)
ts引入组件
weixin_45581741的博客
03-11 3561
ts引入组件 1.首先在 global.d.ts 文件中加上一段代码 主要目的是让ts文件识别vue组件,不然报错 // 让ts文件认识vue模板 declare module '*.vue' { import type { DefineComponent } from 'vue' const component: DefineComponent export default component } 2.在组件文件中引入 defineComponent import { onBeforeMou
Vue3 父传子、使用 defineAsyncComponent 异步挂载组件、利用 is 动态引入组件
RainHg的博客
10-13 1994
警告Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with ...的解决方法
Vue3: 单文件(SFC)输出多组件解决方案.理解defineComponent及如何使用
EvanYYY1的博客
06-05 2180
Vue3 单文件多组件解决方案
关于vue 动态引入异步加载import和require)组件的方法和坑(按需懒加载组件,动态生成路由)babel-plugin-dynamic-import-node 优化编译速度
热门推荐
yorcentroll的博客
01-26 2万+
关于vue 动态引入异步加载)组件的方法和坑(按需懒加载组件,动态生成路由)babel-plugin-dynamic-import-node 优化编译速度
Vue引入异步组件
xiaowude_boke的博客
10-27 588
vue引入异步组件的使用
简单的做一下vue依赖可视化,项目优化---组件异步引入
weixin_48194266的博客
01-25 1079
最近的大屏项目,首屏会加载基本大半的依赖,打包的时候,单个js的文件有30M大小。文件太大的话,部分电脑还不会缓存。这样就形成了页面首屏加载缓慢,刷新页面还不会走缓存也会很缓慢。 开始做一下简单的优化。 首先就是查看加载的js中有什么。 通过npm run build -- --report 来生成分析图。 通过分析图知道了,文件中比较大的依赖是cesium、echarts、openlayers。 cesium是通过二次封装的vue-cli-plugin-cesium 引入的,而且首屏虽然没有第一
【Vue】路由中引入组件Component的三种方式
michiko98的博客
06-14 6437
vue 路由
vue3异步引入组件,如何调用组件方法
最新发布
08-28
在Vue3中,如果你需要异步导入并动态加载某个组件,并且想要在组件加载完成后再调用其中的方法,你可以使用`async setup()`函数配合`ref()`和`onMounted()`钩子。以下是步骤: 1. 首先,在父组件的模板里,通过`<template>`标签动态地引用一个占位符或者`v-if`条件来等待组件加载: ```html <template> <div v-if="isLoaded"> <component :is="currentComponent" ref="myComponent"></component> </div> </template> ``` 2. 然后,在`setup()`函数内部,使用`import.meta.glob`来异步导入组件,这个API可以让你动态获取文件名并返回一个Promise: ```javascript import { onMounted, ref } from 'vue'; export default { async setup() { const currentComponent = ref(null); const isLoaded = ref(false); // 异步加载组件 const loadComponent = async (name) => { try { const component = await import.meta.glob(`./components/${name}.*`); if (component.default) { currentComponent.value = component.default; } } catch (_) { console.error('Failed to load component'); } isLoaded.value = true; // 当组件加载成功时设置为true }; // 初始化组件,这里假设你想从'ChildComponent.vue'开始加载 await loadComponent('ChildComponent'); // 使用onMounted确保在组件加载完成后调用方法 onMounted(() => { if (currentComponent.value && typeof currentComponent.value.methodToCall === 'function') { currentComponent.value.methodToCall(); // 调用组件内的方法 } }); return { currentComponent, isLoaded }; }, }; ```
写文章

热门文章

  • Threejs加载OBJ模型 6874
  • VSCode 如何设置背景图片 6580
  • Vue中如何使用v-model双向数据绑定select、checked等多种表单元素 5552
  • Vue获取子组件实例对象 ref 属性 4607
  • uniapp 目录结构 4060

分类专栏

  • HTML 1篇
  • CSS 1篇

最新评论

  • VSCode 如何设置背景图片

    knight595: 左边目录展开时会遮挡,这个怎么解决?

  • VSCode 如何设置背景图片

    syh200506: 有用,太棒了哥表情包

  • uniapp 目录结构

    xiaoyuanfannao: 我创建api或任何别名目录运行编译后在微信开发者工具里么有显示出来,mp-weixin也没有生成api等自定义名称的目录

  • Vue3 跨组件传参 provide 与 inject

    Mengjialei111: 方法怎么传?

  • vue项目中页面遇到404报错

    技术蜜糖罐: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文

大家在看

  • 思维导图软件 SimpleMind Pro v2.5.0 中文授权版
  • STM32外设之ADC应用--寄存器开发
  • 旅游平台APP 586
  • 程序员分哪几种(非常详细),零基础入门到精通,看这一篇就够了
  • 双向广搜 Solitaire——hdu1401 989

最新文章

  • keep-alive的两个属性的作用
  • 对接小程序的流程
  • for in 和 for of的区别
2024
03月 32篇
02月 12篇
01月 33篇
2023年137篇
2022年14篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴吴吴呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司杭州网站排名优化效果如何淘宝网站内优化优化网站男人和女人婚恋交友网站的优化网站内容优化关键词成都哪个网站做优化好如皋网站关键词优化肇庆电子网站优化公司沈阳哪里可以优化网站丰台专业网站优化排名临淄网站优化推广优化网站排名称赞火26星广州高端网站建设优化日照优化网站代运营罗湖信息网站优化的有效方式张家界一站式营销型网站优化深圳企业网站优化多少钱视频网站的优化宁波网站优化费用十堰品牌网站优化行唐网站优化郁南专题页网站优化淄博网站优化公司广西网站优化建设厂家推广电话罗湖免费网站优化费用多少沈阳网站关键字优化邯郸市网站优化排名网站优化与搭建费用报价金山区官网网站优化定制方案网站关键词优化的好处香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化