当前位置: 首页 > news >正文

Vue 组件开发:构建高效可复用的 UI 构建块

在现代前端开发中,Vue.js 凭借其简洁的 API、渐进式框架设计和强大的生态系统,已经成为众多开发者的首选。Vue 组件化开发是其核心特性之一,它允许我们将复杂的 UI 拆分成多个独立、可复用的组件,从而提高代码的可维护性和可扩展性。本文将深入探讨 Vue 组件开发的基本概念、最佳实践以及高级技巧,帮助你构建高效、可复用的 Vue 组件。

一、Vue 组件基础

  1. 什么是 Vue 组件?

Vue 组件是自定义的 Vue 实例,它扩展了基本的 Vue 功能,通过封装模板、脚本和样式,形成一个独立的、可复用的 UI 构建块。组件可以接受外部传入的属性(props)和事件(events),实现父子组件间的通信。

  1. 创建第一个组件

在 Vue 2.x 中,我们可以使用 Vue.component 方法全局注册一个组件,或者使用单文件组件(.vue 文件)进行局部注册。Vue 3.x 引入了 Composition API,提供了更灵活的组件逻辑组织方式。

// Vue 2.x 全局注册示例 Vue.component('my-component', { template: '
<div>Hello, {{ name }}!</div>
', data() { return { name: 'Vue' }; } }); // Vue 3.x 单文件组件示例(MyComponent.vue)
<template><div>Hello, {{ name }}!</div>
</template><script>export default {data() {return {name: "Vue 3",};},};
</script>
  1. 使用组件

在父组件的模板中,通过标签形式引入子组件。

<div id="app"><my-component></my-component>
</div>

二、组件间通信

  1. Props

Props 是父组件向子组件传递数据的主要方式。使用 props 选项声明接收的数据类型,并在父组件中以属性的形式传递。

// 子组件
<template><div>{{ message }}</div>
</template><script>export default {props: ["message"],};
</script>// 父组件
<template><child-component message="Hello from Parent"></child-component>
</template>
  1. Events

子组件通过 $emit 方法触发自定义事件,父组件监听这些事件来接收数据或执行操作。

// 子组件
<template><button @click="notifyParent">Notify Parent</button>
</template><script>export default {methods: {notifyParent() {this.$emit("notify", "Hello from Child");},},};
</script>// 父组件
<template><child-component @notify="handleNotify"></child-component>
</template><script>export default {methods: {handleNotify(message) {console.log(message);},},};
</script>
  1. Vuex / Pinia

对于大型应用,推荐使用状态管理库如 Vuex 或 Pinia 来管理全局状态,实现跨组件的通信和数据共享。

三、最佳实践

  1. 单一职责原则

每个组件应该只负责一个功能或视图的一部分,保持组件的简洁和独立。

  1. 命名规范

组件名应采用 PascalCase(对于单文件组件)或 kebab-case(对于 HTML 模板中的标签),并且尽量具有描述性。

  1. 组件样式封装

使用 scoped 关键字为组件样式添加作用域,避免样式冲突。

<style scoped>.button {color: red;}
</style>
  1. 插槽(Slots)

插槽允许父组件向子组件传递模板内容,增强组件的灵活性和可复用性。

<!-- 子组件 -->
<template><div><slot></slot></div>
</template><!-- 父组件 -->
<child-component><p>This content is passed via a slot.</p>
</child-component>
  1. 自定义指令和过滤器

虽然 Vue 3.x 中过滤器的使用被官方不推荐,但自定义指令仍然是一个强大的工具,用于封装 DOM 操作逻辑。

四、高级技巧

  1. Composition API

Vue 3.x 引入的 Composition API 提供了一种新的方式来组织和复用逻辑,尤其适用于大型组件或复杂逻辑的场景。

import { ref } from 'vue'; export default { setup() { const count = ref(0); const increment = () => count.value++; return { count, increment }; } };
  1. 动态组件与异步组件

动态组件允许根据条件渲染不同的组件,而异步组件则可以实现组件的按需加载,优化应用性能。

<!-- 动态组件 -->
<component :is="currentComponent"></component><!-- 异步组件 -->
const AsyncComponent = () => import('./AsyncComponent.vue');
  1. Vue Router 与 Vuex 的集成

在构建单页面应用(SPA)时,Vue Router 用于管理路由,Vuex 或 Pinia 用于管理状态,两者结合可以构建复杂的前端应用。

五、总结
Vue 组件化开发是一种强大的模式,它让前端开发的复杂度和维护成本大大降低。通过理解组件的基本概念、掌握组件间通信的方式、遵循最佳实践以及运用高级技巧,我们可以构建出高效、可复用的 Vue 组件,为开发高质量的前端应用打下坚实的基础。希望本文能为你在 Vue 组件开发的道路上提供一些有价值的参考和启示。

相关文章:

Vue 组件开发:构建高效可复用的 UI 构建块

在现代前端开发中&#xff0c;Vue.js 凭借其简洁的 API、渐进式框架设计和强大的生态系统&#xff0c;已经成为众多开发者的首选。Vue 组件化开发是其核心特性之一&#xff0c;它允许我们将复杂的 UI 拆分成多个独立、可复用的组件&#xff0c;从而提高代码的可维护性和可扩展性…...

【Uniapp-Vue3】v-if条件渲染及v-show的选择对比

如果我们想让元素根据响应式变量的值进行显示或隐藏可以使用v-if或v-show 一、v-show 另一种控制显示的方法就是使用v-show&#xff0c;使用方法和v-if一样&#xff0c;为true显示&#xff0c;为false则不显示。 二、v-if v-if除了可以像v-show一样单独使用外&#xff0c;还…...

浏览器报错:您的连接不是私密连接,Kubernetes Dashboard无法打开

问题描述 部署完成Kubernetes Dashboard后&#xff0c;打开HTTPS的web页面&#xff0c;Chrome和Edge浏览器都无法正常加载页面&#xff0c;会提示您的连接不是私密连接的报错。 ​​​​​​​​​​​​ 原因&#xff1a; 浏览器不信任这些自签名的ssl证书&#xff0c;为了…...

asp.net core 属性路由和约定路由

在 ASP.NET Core 中&#xff0c;Web API 中的路由&#xff08;Route&#xff09;用于确定客户端请求的 URL 与服务器端处理逻辑之间的映射关系。路由机制在 Web API 的开发中非常重要&#xff0c;它帮助定义和管理不同请求路径如何触发特定的控制器和操作方法。 1. 路由概述 …...

机器学习之模型评估——混淆矩阵,交叉验证与数据标准化

目录 混淆矩阵 交叉验证 数据标准化 0-1标准化 z 标准化 混淆矩阵 混淆矩阵&#xff08;Confusion Matrix&#xff09;是一种用于评估分类模型性能的工具。 它是一个二维表格&#xff0c;其中行表示实际的类别&#xff0c;列表示模型预测的类别。 假设我们有一个二分类问题&…...

Java实现UDP与TCP应用程序

三、Java实现UDP应用程序 3.1 InetAddress类 java.net.InteAddress类是用于描述IP地址和域名的一个Java类&#xff1b; 常用方法如下&#xff1a; public static InetAddress getByName(String host)&#xff1a;根据主机名获取InetAddress对象public String getHostName()…...

[python3]Excel解析库-calamine,10倍openpyxl性能

calamine 是一个用于读取多种电子表格格式&#xff08;如 Excel、LibreOffice Calc 等&#xff09;的 Python 库。它支持 .xls, .xlsx, .ods 和 .csv 文件格式&#xff0c;提供了简单易用的 API 来加载和处理电子表格数据。calamine 的一大特点是它的轻量级和高效性&#xff0c…...

Clisoft SOS设置Server和Project

Clisoft SOS设置Server和Project 一、关于SOS Servers、Clients、Projects和Work Areas 以下三个图是官方文档中介绍的三种情况 图1&#xff1a;带有两个客户端的SOS服务器 图2&#xff1a;使用本地缓存服务器 图3&#xff1a;远程设计团队的缓存服务器 因为SOS软件需要…...

基于FPGA的出租车里程时间计费器

基于FPGA的出租车里程时间计费器 功能描述一、系统框图二、verilog代码里程增加模块时间增加模块计算价格模块上板视频演示 总结 功能描述 &#xff08;1&#xff09;&#xff1b;里程计费功能&#xff1a;3公里以内起步价8元&#xff0c;超过3公里后每公里2元&#xff0c;其中…...

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl...

Hello 2025(A-C)

补题链接&#xff1a;Dashboard - Hello 2025 - Codeforces A. MEX Table 思路 除了含0的列和行其他的都是0&#xff0c;输出max(n,m)1即可 代码 #include<bits/stdc.h> using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); co…...

Burpsuite20241102macM1版安装

1、安装jdk11 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew update brew install openjdk11 echo export PATH"/opt/homebrew/opt/openjdk11/bin:$PATH" >> ~/.zshrc source ~/.zshrc j…...

jenkins入门10--自动化构建

build periodically&#xff1a;设定类似cron周期性时间触发构建 * * * * * (五颗星&#xff0c;中间用空格隔开&#xff09; 第一颗表示分钟&#xff0c;取值0~59 第二颗表示小时&#xff0c;取值0~23 第三颗表示一个月的第几天&#xff0c;取值1~31 第四颗表示第几月&#xf…...

Java基础概念

自动装箱 Integer i 10; //装箱 int n i; //拆箱 普通数据类型‌&#xff1a;直接在栈内存中分配空间&#xff0c;存储的是具体的值。‌包装类‌&#xff1a;作为对象在堆内存中分配空间。包装类实际上是对普通数据类型的封装&#xff0c;每个包装类都包含了对应的数据类…...

57.在 Vue 3 中使用 OpenLayers 点击选择 Feature 设置特定颜色

在 Web 开发中&#xff0c;地图应用是非常常见的需求&#xff0c;而 OpenLayers 是一个非常强大的地图库&#xff0c;它提供了丰富的地图操作功能。今天&#xff0c;我们将一起学习如何在 Vue 3 中结合 OpenLayers 使用点击事件来选择地图上的 Feature&#xff0c;并设置特定的…...

HTML——61. 单行文本框和密码输入框(主讲input元素的type属性)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>单行文本框和密码输入框</title></head><body><!--input元素的type属性&#xff1a;(必须要有)--> <!--单行文本框:1.type"text"2.可…...

h264之多视点mvc编码及解码过程(JMVC平台举例)

h264标准参考平台JMVC是针对MVC标准的&#xff0c;JMVC支持多视点编码、合流、多视点解码操作。可以利用JMVC生成h264 mvc码流和解码。 JMVC的下载地址是&#xff1a;jvet / JMVC GitLabH.264/AVC multi-view coding (MVC) extension JMVC reference softwarehttps://vcgit.hh…...

深度学习blog-深刻理解线性变换和矩阵

深度学习中避免不了矩阵运算&#xff0c;或者张量&#xff08;其实是矩阵数组&#xff09;运算。卷积是矩阵加、乘法&#xff0c;注意力也是一样。本质都一样&#xff0c;所谓注意力&#xff0c;卷积、滤波&#xff0c;是对不必了解数学的人说的&#xff0c;底层都是矩阵运算&a…...

C语言 扫雷程序设计

目录 1.main函数 2.菜单打印menu函数 3.游戏game函数 4.宏定义 5.界面初始化 6.打印界面 7.设置雷 8.统计排查坐标周围雷的个数 9.排查雷 10.总代码 test.c代码 game.h代码 game.c代码 结语&#xff1a; 一个简单的扫雷游戏&#xff0c;通过宏定义可以修改行列的…...

[笔记] Jenkins 安装与配置全攻略:Ubuntu 从零开始搭建持续集成环境

随着 DevOps 流程的普及&#xff0c;持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;已成为现代软件开发中不可或缺的一部分。Jenkins 作为一款开源的自动化服务器&#xff0c;广泛应用于 CI/CD 管道的构建与管理。它不仅支持多种编程语言和工具链&am…...

【51单片机零基础-chapter3:按键:独立按键|||附带常见C语句.逻辑运算符】

将unsigned char var0;看作沟通二进制和十进制的桥梁 var是8位,初始为0000 0000; 同时可以进行十进制的运算 逻辑运算 位运算 & 按位与(有0则0) | 按位或(有1则1) ~ 按位非 ^ 按位异或(相同则1,不同为0) <<按位左移 >>按位右移 位运算符解释: 0011 1100 <&…...

深入浅出:深层网络处理技术的教学指南

引言 在人工智能的浪潮中&#xff0c;深层网络处理技术&#xff08;Deep Learning&#xff09;无疑是最耀眼的明星之一。无论是图像识别、自然语言处理&#xff0c;还是语音识别&#xff0c;深层网络都展现出了强大的能力。然而&#xff0c;对于初学者来说&#xff0c;深层网络…...

深入浅出Node.js-1(node.js入门)

全新专栏带你快速掌握node.js Node.js入门 html,css,js 30年了 nodejs环境 09年出现 15年 nodejs为我们解决了2个方面的问题&#xff1a; 【锦上添花】让我们前端工程师拥有了后端开发能力&#xff08;开接口&#xff0c;访问数据库&#xff09; - 大公司BFF&#xff08;5…...

Django的runserver

当年执行 python manage runserver命令时 1. 先执行 runserver 中的 handle方法 2. 执行 self.run()方法 3. 执行 self.inner_run() 3.1 inner_run 下 run方法的封装 3.1.1 接着看 handle 怎么来的 封装了一个方法 接着找返回函数 3.1.2在 basehttp 下 3.1.3 get_wsgi_appl…...

MySQL 存储引擎

InnoDB InnoDB是MySQL的默认存储引擎&#xff0c;自MySQL 5.5版本起开始使用。它提供了具有提交、回滚和崩溃恢复能力的事务安全&#xff08;ACID兼容&#xff09;存储引擎。 主要特性&#xff1a; 事务支持&#xff1a;完全支持ACID&#xff08;原子性、一致性、隔离性、持久…...

React知识盲点——组件通信、性能优化、高级功能详解(大纲)

组件通信 React 组件通信详解 在 React 中&#xff0c;组件通信是一个核心概念&#xff0c;主要指的是如何让不同的组件共享和传递数据。React 提供了多种机制来实现组件间的数据传递和状态共享。以下是几种常见的组件通信方式&#xff0c;包括&#xff1a;父子组件通信&…...

Maven 详细配置:Maven 项目 POM 文件解读

Maven 是 Java 开发领域中广泛使用的项目管理和构建工具&#xff0c;通过其核心配置文件——POM&#xff08;Project Object Model&#xff09;文件&#xff0c;开发者能够定义项目的基本信息、依赖关系、插件配置以及构建生命周期等关键要素。POM 文件不仅是 Maven 项目的核心…...

selenium

pythonselenium selenium是一个第三方库&#xff0c;python有很多库&#xff1b; 1、什么是ui自动化? 通过模拟手工操作用户ui页面的方式&#xff0c;用代码去实现自动化操作和验证的行为。 2、ui自动化的优点&#xff1f; &#xff08;1&#xff09;解决重复性的功能测试…...

网络安全:设备原理与操作

设备型号概述 网络安全企业有哪些&#xff1f; 国外&#xff1a;思科&#xff0c;Juniper&#xff0c;惠普&#xff0c;3Com&#xff0c;。。。。 国内&#xff1a;华为&#xff0c;中性&#xff0c;锐捷&#xff0c;蓝盾&#xff0c;绿盟&#xff0c;山石网科&#xff0c;36…...

pytorch中nn.Conv2d详解及参数设置原则

文章目录 基础参数1. in_channels (输入通道数)2. out_channels (输出通道数)3. kernel_size (卷积核大小)4. stride (步幅)5. padding (填充)6. dilation (膨胀)7. groups (分组卷积)8. bias (偏置) 如何设置参数&#xff1f;1. **in_channels 和 out_channels&#xff08;输入…...

select下拉框,首次进入页面没有显示value的情况

bug场景&#xff1a; 类似这种bug情况排查如下&#xff1a; 首先 理解含义 options就是存放键值对的&#xff0c;id就是key&#xff0c;对上了它就自动把label显示 而且如果你用来当作key和label的字段&#xff0c;与后端返回的不一致&#xff0c;还可以进行更改 其次 排查接…...

接口项目操作图-thinkphp6-rabbitmq

一、用户开户流程 用户首次需要联系商务开通账户&#xff0c;需要提供手机号及来访问的IP。开好户之后&#xff0c;平台方将提供用户访问的key值及header头部参数的公钥加密文件、body访问参数以及返回数据的公私钥加解密文件。 二、用户请求流程 用户将拿到的key值进行rsa公钥…...

thinkphp6.0常用设计模式实例

单例模式 (Singleton) 场景&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 实际业务&#xff1a;数据库连接、日志记录器、配置管理等。 ThinkPHP 6.0 实现&#xff1a; namespace app\common;class DatabaseConnection {private static $instance …...

微服务保护——Sentinel

什么是微服务保护&#xff1f; 微服务保护是一系列用于保障微服务架构稳定、可靠运行的策略与技术手段&#xff0c;在复杂的分布式微服务系统里&#xff0c;它能避免局部故障引发连锁反应&#xff0c;从而维持整个系统的可用性&#xff0c;主要涵盖以下几个关键部分&#xff1a…...

php 多进程那点事,用 swoole 如何解决呢 ?

在 PHP 中&#xff0c;多进程的处理通常会遇到一些挑战&#xff0c;比如资源共享、进程间通信、性能优化等。Swoole 是一个高性能的协程和多进程框架&#xff0c;旨在为 PHP 提供异步、并发、协程等功能&#xff0c;解决了传统 PHP 环境中的多进程管理问题。通过使用 Swoole&am…...

STM32+ADC+DMA快速循环转换

测试平台&#xff1a;STM32F405RGT6 uint32_t AD_Buf[100]{0}; HAL_ADC_Start_DMA(&hadc2,(uint32_t *)AD_Buf,100); while(1) {printf("AD_Buf:%d\n",AD_Buf[0]); }...

移动电商的崛起与革新:以开源AI智能名片2+1链动模式S2B2C商城小程序为例的深度剖析

摘要&#xff1a;本文旨在探讨移动电商的崛起背景、特点及其对传统电商模式的革新影响&#xff0c;并以开源AI智能名片21链动模式S2B2C商城小程序为具体案例&#xff0c;深入分析其在移动电商领域的创新实践。随着移动互联网技术的飞速发展&#xff0c;移动电商已成为电商行业的…...

QT实现 端口扫描暂停和继续功能 3

上篇QT给端口扫描工程增加线程2-CSDN博客 为按钮pushButton_Stop添加clicked事件&#xff0c;功能为暂停扫描&#xff0c;并在暂停后显示继续按钮&#xff0c;点击继续按钮之后继续扫描 1.更新UI 添加继续按钮 点击转到槽则会自动声明 2. 更新 MainWindow.h 需要新增的部分…...

C_字符数组存储汉字字符串及其索引

字符串就是字符数组&#xff0c;可以定义一个char类型的数组来存储字符串。 如果要存储多个字符串则可以定义一个char类型的二维数组。 存储多个汉字字符串的话&#xff0c;可以考虑用char类型的二维数组。 不过要注意&#xff0c;一个汉字在内存中占用的字节数确实大于一个…...

Linux标准IOday1

1:思维导图 2:将 student.c这个练习题&#xff0c;改成链表后实现 头文件link.h #ifndef __STRUCT_H__ #define __STRUCT_H__ #include <stdio.h> #include <stdlib.h> typedef struct Student{char name[20];double math;double chinese;double english;double…...

SEO内容优化:如何通过用户需求赢得搜索引擎青睐?

在谷歌SEO优化中&#xff0c;内容一直是最重要的因素之一。但要想让内容真正发挥作用&#xff0c;关键在于满足用户需求&#xff0c;而不是简单地堆砌关键词。谷歌的算法越来越智能化&#xff0c;更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…...

API调用淘宝京东商品详情接口示例参考,json格式数据示例

以下是API调用淘宝和京东商品详情接口的JSON格式数据示例&#xff1a; 淘宝商品详情接口JSON数据示例 淘宝商品详情接口&#xff08;通常称为item_get或类似的名称&#xff09;是淘宝开放平台提供的一个API接口&#xff0c;允许开发者根据商品的ID&#xff08;Item ID&#x…...

css实现垂直文本

效果 知识 writing-mode: <value>; 可选值 horizontal-tb: 默认值。文本从左到右&#xff08;或从右到左&#xff09;排列&#xff0c;然后从上到下。vertical-rl: 文本从上到下排列&#xff0c;然后从右到左。适用于垂直书写的方向&#xff0c;如日语和中文。vertica…...

【AI日记】25.01.07

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI 参加&#xff1a;kaggle 比赛 Forecasting Sticker Sales 读书 书名&#xff1a;国家为什么会失败阅读原因&#xff1a;2024 年诺贝尔经济学奖得主的力作&#xff0c;之前我已经读过他另一…...

logback日志

一、使用两个以上spring环境变量做三目操作 <springProperty name"application_name" scope"context" source"spring.application.name"/><springProperty name"trace_app_name" scope"context" source"sprin…...

Android NDK开发入门3之基本语法

JNI语法基础 函数生成语法&#xff1a; extern “ C” 作⽤&#xff1a;避免编绎器按照C的⽅式去编绎C函数 1、C不⽀持函数的重载&#xff0c;编译之后函数名不变&#xff1b; 2、C⽀持函数的重载&#xff08;这点与Java⼀致&#xff09;&#xff0c;编译之后函数名会改变…...

unity学习9:unity的Asset 导入和导出

目录 1 Assets 资产/资源 1.1 编辑器里Assets 和explorer文件夹 里一一对应 1.2 在编辑器里操作&#xff0c;和文件夹内操作&#xff0c;多数相同还是有些不同 2 往Assets里导入零散文件 2.1 往Assets里导入零散文件 2.2 把fbx文件导入到hierarcy /scene 里&#xff0c;…...

Unity学习笔记(七)使用状态机重构角色攻击

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 攻击状态重构 首先我们重构攻击状态的动画 之前的动画&#xff0c;我们是使用状态(isAttacking)攻击次数(comboCounter)完成动画的过渡&#xff0c;这样虽然能完成功能&#xff0c;但是如…...

【整理集合大全】MySQL(4) 数据库增删改查SQL语句

查看数据库 show databases; 使用数据库 use 数据库名;创建数据库 CREATE DATABASE 数据库名;删除数据库 DROP DATABASE 数据库名;创建表 create table 表名(列名1 类型(长度) [约束],列名2 类型(长度) [约束],…… );长度区别 int类型带长度&#xff1a;不影响存取值&…...

Flutter 鸿蒙化 flutter和鸿蒙next混和渲染

前言导读 这一个节课我们讲一下PlatformView的是使用 我们在实战中有可能出现了在鸿蒙next只加载一部分Flutter的情况 我们今天就讲一下这种情况具体实现要使用到我们的PlatformView 效果图 具体实现: 一、Native侧 使用 DevEco Studio工具打开 platform_view_example\oho…...