什么是动态组件以及使用场景

文章目录


一、vue中的动态组件是什么?有什么用?

动态组件指可以动态切换组件的显示和隐藏。

使用场景:比如,某些场景会需要在两个组件间来回切换,如Tab界面;再比如,新闻详情页,不确定要渲染的是图片相关组件还是文件相关组件,有可能都渲染或渲染其中一个或其中多个混合。不知道渲染什么类型的组件,可以用动态组件。

写法:

二、使用demo

1.tab页签中的使用

代码如下(示例):

javascript 复制代码
<template>
	<el-tabs
      v-model="activeName"
      @tab-click="handleClick"
    >
     <el-tab-pane label="页签1" name="组件1">页签1</el-tab-pane>
     <el-tab-pane label="页签2" name="组件2">页签2</el-tab-pane>
    </kui-tabs>
    <keep-alive>
    	<!-- 动态组件 -->
    	<component :is="组件1"></component>
    </keep-alive>
</template>
<script setup>
	import 组件1 from './组件1.vue'
	import 组件2 from './组件2.vue'
// ....
	activeName = '页签1'
	handleClick(tab) {
		this.activeName = tab.name;
	}
</script>

2.模拟新闻页demo

代码如下(示例):

javascript 复制代码
<template>
	<div>
		<!-- 动态组件 -->
        <div v-for="(val, key) in newsData" :key="key">
        	<component :is="val.type" :data="val.data"/>
        </div>
	</div>
</template>
<script>
	import text form './text.vue'
	import img from './img.vue'
	...
	export default {
		...
		data() {
			return {
				newsData: [
					{type: 'text', data:[]},
					{type: 'img', data:[]},
					...
				]
			}
		}
	}
</script>

三、用keep-alive包裹,保持状态

当使用<component :is="..."> 来在多个组件间作切换时,被切换掉的组件会被卸载。我们可以通过<KeepAlive>组件强制被切换掉的组件仍然保持"存活"的状态。

javascript 复制代码
<!-- currentTab 改变时组件也改变 -->
  <keep-alive>
	<component :is="tabs[currentTab]"></component>
  </keep-alive>

总结

动态组件可以动态切换组件的显示与隐藏。

不知道渲染什么类型的组件,需要根据数据确定组件类型时,可以使用动态组件。

相关推荐
恋猫de小郭1 天前
Flutter 设计包解耦新进展,material_ui 和 cupertino_ui 发布预告
android·前端·flutter
linux_cfan1 天前
[2026深度评测] 打造“抖音级”丝滑体验:Web直播播放器选型与低延迟实践
前端·javascript·html5
天天向上的鹿茸1 天前
前端适配方案
前端·javascript
We་ct1 天前
LeetCode 226. 翻转二叉树:两种解法(递归+迭代)详解
前端·算法·leetcode·链表·typescript
叫我一声阿雷吧1 天前
JS实现无限滚动加载列表|适配多端+性能优化【附完整可复用源码】
开发语言·javascript·性能优化
哆啦A梦15881 天前
Vue3魔法手册 作者 张天禹 013_pinia
前端·vue.js·typescript
哆啦A梦15881 天前
Vue3魔法手册 作者 张天禹 014_组件通信
前端·vue.js·typescript
木斯佳1 天前
前端八股文面经大全:有赞前端一面二面HR面(2026-1-13)·面经深度解析
前端·状态模式
VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue养老院管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
码云数智-园园1 天前
Vue 3 + TypeScript 企业级项目架构实战:从0到1打造可维护的前端工程体系
前端·vue.js·typescript