Vue 3 企业级项目实战课
杨文坚
前阿里前端 Leader,前腾讯 IMWeb 团队高级前端工程师
6908 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
实战篇 (19讲)
Vue 3 企业级项目实战课
15
15
1.0x
00:00/00:00
登录|注册

10|动态渲染组件:如何实现Vue的动态渲染组件?

你好,我是杨文坚。
前两节课,我们已经入门了 Vue.js 3.x 自研组件库的开发和组件库的主题方案设计,还了解了按钮组件这一基础组件的开发流程及其主题化实现。
组件库,核心是将不同类型的功能组件聚合起来,提供给业务前端开发者按需选择,用到实际前端页面上。接下来的几节课,我们主要会一步步开发不同类型的 Vue.js 3.x 的组件,打造属于自己的 Vue.js 3.x 企业级自研组件库。
今天,我们先学习组件库里常见的一种组件类型,动态渲染组件

什么是动态渲染组件?

在平时工作中用 Ant Design 或者 Element Plus 等前端组件库时,相信你经常会用到对话框、消息提醒和侧边抽屉等组件,来做一些信息的动态显示和动态操作,这类组件都可以通过函数式的方式直接调用。
这类组件从功能上分类,一般被称为“反馈类型组件”。如果从技术实现方式上归类,就可以归纳为“动态渲染组件”。那我们如何从技术实现的角度,理解动态渲染组件呢?
从字面意义可以看出来,动态渲染组件就是通过“动态”的方式来“渲染”组件,不需要像常规 Vue.js 3.x 组件那样,把组件注册到模板里使用。
所以,动态渲染组件的两个技术特点就是:
以直接函数式地使用来执行渲染,使用者不需要写代码来挂载组件;
组件内部实现了动态挂载和卸载节点的操作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Vue.js 3.x动态渲染组件是一种通过函数式调用实现组件渲染和卸载的技术。该技术常用于实现消息提醒和对话框等功能。动态渲染组件的API设计简洁易用,主要围绕挂载和卸载两个步骤展开。在Vue.js 3.x框架下,动态渲染组件的实现过程包括创建动态节点DOM、挂载组件、卸载组件和销毁动态节点。除了JSX语法,还可以使用模板语法来实现动态渲染组件。文章还介绍了如何通过Vue.js 3.x内置的\<transition>组件和CSS3实现动画过渡效果,提升用户体验。文章还讨论了如何通过Vue.js 3.x内置的\<transition>组件和CSS3实现动画过渡效果,提升用户体验。文章还讨论了如何通过Vue.js 3.x内置的\<transition>组件和CSS3实现动画过渡效果,提升用户体验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Vue 3 企业级项目实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 初烬
    老师,你好问一下,这边为什么在挂载dom的时候选择createApp。而不是是用telport

    作者回复: 您好,Vue.js动态渲染组件有很多种实现方式,本课是用最简单的方式来实现,方便课程讲解。但又由于篇幅有限,不能把大部分动态渲染组件的实现方式都一一列举出来。 如果你熟悉Teleport来实现动态渲染,那也是可以实现的,只不过要多学习和理解一个新的API。

    2022-12-19归属地:陕西
    1
  • 刘大夫
    前辈您好,想问一下,在 vue3 中,想实现 vue2 里动态组件 component 和 v-bind="$listeners" 的功能该怎么做呢,我看文档,component 被划到了选项式 api 的范畴,那用组合式 api 的方式,该怎么去实现呀

    作者回复: 您好,你可以参考一下Vue.js的官方文档 https://v3-migration.vuejs.org/breaking-changes/listeners-removed.html

    2023-02-20归属地:北京
  • Anne
    有个问题请老师解惑,多个应用实例之间数据能否共享,如何共享?比如主应用引入ant design vue组件库,副应用如何共享使用?

    作者回复: 您好,请问您指的是 “例如ant design vue组件库在主副应用的共用场景” 吗? 如果是这种场景,可以考虑将“公共组件库”在编译配置中external出来,变成全局变量共用。

    2023-01-18归属地:江苏
  • 沧海一粟
    在创建应用实例的时候为啥不直接使用要作为根组件的而是要多包一层组件

    作者回复: 您好,创建应用实例是可以提供一个container去自定义挂载的DOM。本课中动态创建div挂载在body上只是方便内容讲解,不是绝对的解决方案,你也可以灵活设置一个container去挂载实例。

    2023-01-08归属地:广东
  • 珍爱学习账号
    整个过程,我们可以用最简单的 Vue.js 3.x 代码实现: 下面这段代码 h(DialogComponent, {}); } }); 应该h(ModuleComponent, {}); } }); 搞混了。

    作者回复: 您好,谢谢指正,这个案例和Dialog代码混在一起了。

    2022-12-29归属地:日本
  • 文艺理科生
    如果写一个成熟的弹窗组件是不太容易的,可以参考popper js,简单的一个组件,做了很多事情

    作者回复: 您好,是的,很多成熟的组件库是封装了Popper组件来承载“浮层”的功能,然后再基于Popper组件来扩展Dialog等浮层相关组件。

    2022-12-27归属地:北京
  • ZR-rd
    请问下老师,Dialog 组件一般还可以通过声明组件的方式使用,通过 visible 属性控制显示,如何做到这两者都支持呢

    作者回复: 通过封装不同的入口就可以了

    2022-12-26归属地:北京
  • 癡癡的等你歸
    数据通信我觉得应该是通过参数传入和方法传出,当成一个普通的组件一样使用吧。

    作者回复: 您好,这个技术角度也是可以实现的。

    2022-12-17归属地:浙江
  • WGH丶
    妙啊,我之前也搞过动态渲染组件,今天一看,很多考虑不周。学到很多,给作者打call~ 本期思考题: 函数很容易实现相互通信,调用时可以通过函数参数传递信息。动态组件可以暴露一些回调函数来包装好数据,让调用组件获取即可。
    2022-12-18归属地:陕西
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部