当前位置: 首页
前端开发
Vue3组件开发详解与实战技巧

Vue3组件开发详解与实战技巧

热心网友 时间:2026-07-16
转载

Vue3组件将UI拆分为独立可复用小零件。单文件组件定义后需导入父组件模板使用,也可全局注册。组件独立运行维护自身状态,通过defineProps声明props接收动态数据,用v-bind绑定。子父交互通过事件实现,动态组件用:is切换,被切组件默认卸载,可用keep-alive保持存活。

Vue 组件基础:定义、使用与核心机制

组件的核心价值在于将用户界面拆分为独立、可复用的模块。这既实现了代码层面的解耦,也提升了团队协作效率与后期维护的便捷性。

如何定义 Vue 组件

若项目配置了构建工具(如 Vite),通常将 Vue 组件定义在独立的 .vue 文件中,这便是广为人知的单文件组件(SFC),其结构清晰、开发高效。

若未使用构建工具,也可通过纯 JavaScript 对象定义组件,但此方式较少采用,故此处不作深入探讨。

组件的使用与注册

在父组件中引用子组件时,首先需要将其导入,随后即可在父组件的模板中直接作为自定义标签使用。

 复制代码<template>
  <h1>Here is a child component!h1>
  <ButtonCounter />
template>

此外,Vue 还支持全局注册——将组件注册为全局后,任意组件均可直接使用,无需重复导入。

  • 另一个关键特性是:每个组件独立运行,维护自身状态。每次使用组件都会创建一个全新的实例,彼此之间互不干扰。

通过 props 传递数据

假设正在开发一个博客系统,希望所有文章拥有统一的视觉风格,但标题和内容各不相同。此时,就需要通过 props 向组件传递动态数据。

props 是一种特殊的属性(attributes)。要使组件能够接收外部数据,需在组件的 props 选项中提前声明。defineProps() 用于告知 Vue 框架该组件预期接收哪些数据

 复制代码<template>
  <h4>{{ title }}h4>
template>

声明后的 props 会自动暴露给模板。如需在脚本中进一步操作,defineProps 会返回一个对象,包含所有可传入的 props:

 复制代码const props = defineProps(['title'])
console.log(props.title)

若未使用 <template> <h4>{{ title }}h4> template>

  • 注意,这里的 :title="post.title"v-bind:title="post.title" 的缩写。v-bind 可将数据动态绑定到 HTML 属性或组件 props 上,实现 HTML 属性与 JavaScript 变量的实时联动。

监听事件:子父组件通信

回到 组件。有时子组件需要与父组件进行交互——例如一个无障碍场景:用户点击按钮后,文章文字放大,但页面其他部分保持默认字号。

在父组件中,可以添加一个 postFontSize 的 ref 来实现此效果:

 复制代码const posts = ref([
  /* ... */
])const postFontSize = ref(1)

然后在模板中利用它控制所有博客文章的字体大小:

 复制代码

"{ fontSize: postFontSize + 'em' }"> <BlogPost v-for="post in posts" :key="post.id" :title="post.title" />

接下来,为 组件添加一个按钮:

 复制代码
<template>
  <div class="blog-post">
    <h4>{{ title }}h4>
    <button>Enlarge textbutton>
  div>
template>

我们期望的效果是:子组件的按钮点击后,能通知父组件放大所有文章的文字。

实现方案依赖 Vue 内置的自定义事件系统。父组件可以通过 v-on@ 选择性监听子组件抛出的自定义事件,这与监听原生 DOM 事件的方式类似:

 复制代码<BlogPost
  ...
  @enlarge-text="postFontSize += 0.1"
 />
  • 这里的 @enlarge-text="postFontSize += 0.1"v-on:enlarge-text="postFontSize += 0.1" 的缩写。含义是:一旦 enlarge-text 事件被触发,立即执行 postFontSize += 0.1

子组件则通过调用内置的 $emit 方法,传入事件名称来抛出事件:

 复制代码
<template>
  <div class="blog-post">
    <h4>{{ title }}h4>
    <button @click="$emit('enlarge-text')">Enlarge textbutton>
  div>
template>

由于父组件监听 @enlarge-text="postFontSize += 0.1",一旦收到事件便会更新 postFontSize 的值。

与 props 类似,需要抛出的事件也需通过 defineEmits() 声明:

 复制代码

defineProps 类似,defineEmits 仅可用于 <template> <AlertBox> Something bad happened. AlertBox> template>

AlertBox.vue

 复制代码

动态组件

某些场景需要在两个组件之间来回切换,例如 Tab 界面。Vue 提供了 元素和特殊的 is 属性来解决这个问题:

 复制代码
<component :is="tabs[currentTab]">component>

传递给 :is 的值可以是以下两种:

  • 已注册的组件名
  • 导入的组件对象

需要注意的是,当使用 在多个组件间切换时,被切出的组件会被直接卸载。若希望保持它们“存活”状态,可以使用 组件包裹。

App.vue

 复制代码

  <div class="demo">
    <button
       v-for="(_, tab) in tabs"
       :key="tab"
       :class="['tab-button', { active: currentTab === tab }]"
       @click="currentTab = tab"
     >
      {{ tab }}
    button>
	  <component :is="tabs[currentTab]" class="tab">component>
  div>
来源:https://juejin.cn/post/7657904306764333097

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Leaflet地图制作教程快速创建简单地图页面

Leaflet地图制作教程快速创建简单地图页面

Leaflet是一个轻量高效的JavaScript地图库,适合构建网页地理信息应用。它易于上手,支持移动设备,拥有丰富插件。使用需引入库文件并创建地图容器,可添加第三方瓦片底图与标记点,实现交互控件与事件响应。通过插件和矢量图形可扩展功能,优化大量数据展示并确保响应式设计。

时间:2026-07-16 06:34
Leaflet与OpenLayers地图库功能对比与选择指南

Leaflet与OpenLayers地图库功能对比与选择指南

Leaflet与OpenLayers是两大主流开源地图库。Leaflet轻量简洁,适合快速构建移动端地图应用,依赖插件扩展功能。OpenLayers功能全面强大,支持复杂GIS标准和数据处理,适合专业地理信息系统。两者在API设计、性能侧重和适用场景上各有特点,选择需依据项目需求与技术背景。

时间:2026-07-16 06:34
Leaflet地图API入门指南快速上手教程

Leaflet地图API入门指南快速上手教程

Leaflet是一款轻量、灵活的JavaScript地图库,适合构建移动端交互式地图。它提供地图加载、标记点、弹窗、矢量图形绘制与事件处理等核心功能,可快速创建基础地图并添加各类要素。其丰富的插件生态和框架集成方案还支持热力图、图层控制等进阶功能,易于上手且扩展性强。

时间:2026-07-16 06:34
React Native开发实战指南 常见用法与最佳实践详解

React Native开发实战指南 常见用法与最佳实践详解

ReactNative允许使用JavaScript和React开发iOS与Android应用,提升跨平台开发效率。项目从环境搭建开始,使用核心组件构建界面,并通过API实现设备交互。导航依赖ReactNavigation库,状态管理可使用内置钩子或Redux等。需访问原生功能时,可通过桥接机制调用原生模块。开发中需关注调试、性能优化,并最终为各平台打包发布。

时间:2026-07-16 06:34
History pushState 实现网页导航的简单示例教程

History pushState 实现网页导航的简单示例教程

HistoryAPI的pushState方法允许JavaScript直接更新浏览器URL和历史记录,而无需刷新页面,是实现单页面应用前端路由的核心技术。通过阻止链接默认跳转、调用pushState更新URL并加载内容,再结合popstate事件处理浏览器前进后退,可构建完整的导航体验。实际应用中需注意服务器配置与状态对象管理,其原理是许多前端路由库的基础。

时间:2026-07-16 06:33
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜