对Vue组件化开发思想的一些理解

news2025/1/11 22:45:32

目录

组件的分类

为什么需要组件化开发

如何设计组件

组件间通信


组件系统是 Vue的一个重要概念,让我们可以用独立可复用的小组件来构建大型应用。几乎任意类型的应用的界面都可以抽象为一个组件树:

写一个 Vue 项目,其实就是在写一个个的组件。

组件的分类

从组件类型来说,Vue中的组件主要分为三种:页面组件、业务组件、基础组件。

1、页面组件

每一个页面(.vue)其实都可以看成是一个Vue的组件。它可以由多个业务组件或基础组件搭建而成,像搭积木一样。

特点是:

1)通过vue-router进行定义和映射;

2)没有props 选项和自定义事件,不会对外提供接口;

3)不会被复用;

在项目开发中,我们大部分写的都是这类组件(页面),主要是还原设计稿,完成需求。在协同开发时,每个人都是开发和维护自己的页面,很少有交集,也不需要有太多的组件复用设计上的考虑。

2、业务组件

业务组件,顾名思义,它是和业务逻辑强耦合,会包含数据获取、处理、渲染等数据交互的业务逻辑。在一定程度上和页面组件类似。

特点是:

1)通过Vue.component来创建(全局注册)或components 选项中定义(局部注册);

2)有props 选项和自定义事件,可以对外提供接口;

3)可以被复用;

在项目开发中,我们也会经常写这类组件,但需要考虑组件的可维护性和复用性。

3、基础组件

基础组件则不包含业务逻辑的组件,其功能更加独立具体,粒度更细,比如按钮、输入框、选择器等。

其特点包含业务组件的特点,不同之处是:

1)不包含业务逻辑;

2)功能更加单一;

3)通用性更强;

通常,业务组件只在当前项目中使用,基础组件可以在任何项目中使用。比如Vant、Element等开源的UI组件库,这些组件的 API 进行过高强度的抽象,可以通过不同配置实现不同的功能。

所以,基础组件的开发要考虑API 的设计、兼容性、以及组件间的通信等问题。不依赖 Vuex 和 Bus等其它库的情况下,进行各组件间的通信。

为什么需要组件化开发

通过组件化开发,可以提高代码的重用性、可维护性和可读性,降低项目的复杂度,提升开发效率和团队协作能力。

组件化的优势:

1、代码重用和可维护性

组件化开发可以使代码更加模块化和可复用。将页面划分为独立的组件可以使开发者在不同的页面中重复使用这些组件,减少代码冗余并提高代码的可维护性。

2、提高开发效率

组件化开发使得团队成员可以独立开发不同的组件,各自关注组件的实现细节,不需要关心整个页面的实现。这样可以并行开发不同的组件,提高开发效率。

3、降低项目复杂度

随着项目规模的增大,页面的复杂度也会增加。使用组件化开发可以将复杂的页面拆分为多个独立的组件,每个组件关注自己的功能,降低了整个项目的复杂度,使得代码更加清晰和可维护。

4、提升代码可读性

使用组件化开发可以使代码更加结构化和可读,每个组件都是一个独立的模块,有自己的模板、样式和逻辑。这样开发者可以更容易理解和维护代码,也方便其他人理解和使用组件。

5、实现更好的团队协作

组件化开发使得团队成员可以按照各自的专长和责任进行开发,每个人负责一部分组件。这样可以更好地分工合作,提升团队的协作效率。

如何设计组件

在Vue组件设计中,应关注其可读性、可维护性和可复用性。Vue组件设计的一般原则,或者说Vue组件设计需要注意下面几个方面:

1、单一职责原则

每个Vue组件应有单一职责,只负责一个明确的功能模块。

2、数据驱动视图

每个Vue组件的视图应该是基于一个数据模型的,这个数据模型可以是组件内部自身的数据,也可以是组件的父组件传递的props。

3、组件划分

Vue组件应该根据功能、状态等设计原则进行划分,避免组件过度复杂。

4、组件可复用

组件应该易于复用和组合,避免重复造轮子。

5、组件通信

Vue组件之间的通信应该合理并避免出现不必要的性能瓶颈。

组件间通信

在Vue组件间进行通信有以下几种方式:

1、Props / 父子组件通信

父组件可以通过props向子组件传递数据,子组件通过props接收数据。这是最常见和简单的组件通信方式。

2、自定义事件 / 子组件向父组件通信

子组件可以通过$emit方法触发自定义事件,并传递数据给父组件。父组件可以使用v-on指令监听子组件触发的事件,然后处理相应逻辑。

3、$ref / 直接访问子组件实例

可以使用$ref来引用子组件实例,然后直接访问子组件的属性和方法。这种方式一般用于父组件直接操作子组件的场景。

4、$parent / $children

访问父 / 子实例。 这两种都是直接得到组件实例,使用后可以直接调用组件的方法或访问数据。

5、Vuex / 集中式状态管理

Vuex是Vue的官方状态管理库,用于管理应用的各种状态。可以在任意组件中通过commit提交mutations或dispatch触发actions修改状态,并在需要的组件中通过计算属性或getter获取状态。

6、Provide / Inject

父组件可以使用provide选项提供数据,然后子组件可以使用inject选项注入这些数据。这样就可以在父组件中传递数据给子孙组件,而不需要显式地通过props传递。

7、事件总线 / 非父子组件通信

可以使用Vue实例作为事件总线,在其中定义事件和触发事件的方法,然后在任意组件中通过$on和$emit来进行事件的监听和触发。这样就可以实现非父子组件之间的通信。

8、插槽 slot

插槽 slot,它可以分发组件的内容。当需要多个插槽时,会用到具名 slot。没有写名字的,就是默认的 slot。作用域插槽在父组件传递内容时还可以在插槽内部使用子组件的数据。

以上是常用的Vue组件间通信方式。而组件间通信场景主要归纳为三种:父子通信、兄弟通信、跨级通信。选择适合场景的通信方式可以使代码更加清晰、可维护和可扩展。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口测试 react+unittest+flask 接口自动化测试平台

目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图 1 新建用例 2 生成测试任务 3 执行并查看测试报告 3-2 用例管理 3-2-1 用例设计 3-3 任务管理 3-3-1 创建任务 3-3-2 执行任务 3-3-3 测试报告 3-3-4 邮件通知 1 前言 构建…

idea新建xml模板设置,例如:mybatis-config

在idea怎么新建mapper.xml文件&#xff0c;具体操作步骤和结果如下&#xff0c;其他文件也是可以自定义模板的流程和步骤一致&#xff01; 效果如下&#xff1a; 步骤如图&#xff1a; step1&#xff1a; step2&#xff1a; 文件内容&#xff1a; <?xml version"…

Android.mk 文件使用解析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Android.mk 简介二、Android.mk 的基本格式三、Android.mk 深入学习一四、 Android.mk 深入学习二五、 Android.mk 深入学习三六、 Android.mk 判断…

C++【哈希表的模拟实现】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 16.11.17 文章目录 &#x1f307;前言&#x1f3d9;️正文1、模拟实现哈希表&#xff08;闭散列&#xff09;1.1、存储数据结构的定义1…

MySQL函数以及存储过程

创建表并插入数据‘ 字段名 数据类型 主键 外键 非空 唯一 自增 id INT 是 否 是 是 否 name VARCHAR(50) 否 否 是 否 否 glass VARCHAR(50) 否 否 是 否 否 sch 表内容 id name glass 1 xiaommg glass 1 2 xiaojun glass 2 mysql> select * from sch; -------------------…

火车头采集器下载中文图片地址报错:发生错误终止..

火车头采集器下载中文图片地址报错&#xff1a;发生错误终止.. 报错信息 该问题时网友发现的&#xff0c;采集的内容中图片URL地址包含中文字符。 然后在采集内容时火车头自动下载图片就提示&#xff1a;发生错误终止&#xff0c;远程服务器返回错误&#xff1a;&#xff08…

MySQL 主从延迟的常见原因及解决方法

主从延迟作为 MySQL 的痛点已经存在很多年了&#xff0c;以至于大家都有一种错觉&#xff1a;有 MySQL 复制的地方就有主从延迟。 对于主从延迟的原因&#xff0c;很多人将之归结为从库的单线程重放。 但实际上&#xff0c;这个说法比较片面&#xff0c;因为很多场景&#xf…

我司的短信接口被刷了

如何发现的 成本分摊系统&#xff0c;将成本分摊给业务部门时&#xff0c;业务部门对账&#xff0c;发现某一类型的短信用量上涨了100多倍 排查调用来源时&#xff0c;发现来源为C端用户&#xff0c;由于调用量异常高&#xff0c;业务反馈近期无活动&#xff0c;因此怀疑被刷…

GAMES101 作业0

Visual Studio 2019下环境配置 课上提供的环境是Linux, 还需要安装Vitrual Box和创建虚拟机&#xff0c;省事就直接在Windows系统下Visual Studio下操作了。 简单的环境配置&#xff1a; 下载Eigen 的库在工程属性中添加目录&#xff1a; 2处地方 注意&#xff1a; 刚添加完…

CONTAINER = ALL是ALTER USER语句的默认值

连接到root时查看有关root&#xff0c;CDB和PDB的数据 当公用用户执行查询时&#xff0c;可以限制X $表和V $&#xff0c;GV $和CDB_ *视图的视图信息。X$表和这些视图包含有关应用程序root及其关联应用程序PDB的信息&#xff0c;或者如果连接到CDB root&#xff0c;则是整个C…

基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

松鼠回家(最短路+二分)

D-松鼠回家_2023河南萌新联赛第&#xff08;一&#xff09;场&#xff1a;河南农业大学 (nowcoder.com) #include<bits/stdc.h> using namespace std; #define int long long const int N2e510; map<int,int>a; int n,m,st,ed,h; struct node{int x,y; }; vector&l…

解密Prompt系列4. 升级Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

这一章我们聊聊指令微调&#xff0c;指令微调和前3章介绍的prompt有什么关系呢&#xff1f;哈哈只要你细品&#xff0c;你就会发现大家对prompt和instruction的定义存在些出入&#xff0c;部分认为instruction是prompt的子集&#xff0c;部分认为instruction是句子类型的prompt…

wangEditor富文本编辑器的调用开发实录2(V5版本自定义粘贴,去除复制word或网页html冗余样式代码的解决方案)

wangEditor富文本编辑器&#xff1a;自定义粘贴&#xff0c;去除复制word或网页html冗余样式代码的解决方案 1.环境说明2.解决方案3.完整代码总结 在使用wangEditor富文本编辑器时&#xff0c;当从word文档或者其他网页复制文本内容粘贴到编辑器中&#xff0c;如果不过滤掉复制…

4. CSS用户界面样式

4.1什么是界面样式 所谓的界面样式,就是更改一些用户操作样式,以便提高更好的用户体验。 ●更改用户的鼠标样式 ●表单轮廓 ●防止表单域拖拽 4.2鼠标样式cursor li {cursor: pointer; }设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状。 4.3轮廓线outline…

汽配企业实施MES管理系统前有哪些注意事项

随着汽车行业的快速发展&#xff0c;汽配企业面临着越来越激烈的市场竞争。为了提高生产效率、降低成本、提升产品质量。实施MES管理系统成为了许多汽配企业的选择。但在实施MES生产管理系统之前&#xff0c;汽配企业需要注意以下几个方面&#xff0c;以确保项目的成功实施。 一…

GaussDB火焰图分析

目录 问题描述问题现象告警业务影响原因分析处理方法 问题描述 CPU利用率是衡量系统负载和健康度的重要指标之一&#xff0c;系统在运行过程中时常发生CPU利用率高的情况。在分析性能问题时&#xff0c;可通过火焰图查看CPU耗时&#xff0c;了解瓶颈在哪里。 问题现象 部分s…

6.溢出的文字省略号显示

6.1单行文本溢出显示省略号 必须满足三个条件 /*1. 先强制一行内显示文本*/ white-space: nowrap; &#xff08; 默认 normal 自动换行&#xff09; /*2. 超出的部分隐藏*/ overflow: hidden; /*3. 文字用省略号替代超出的部分*/ text-overflow: ellipsis;【示例代码】 <…

在Excel电子表格中用公式实现最最简易的标签套打

每月要为单位新入职员工打印标签贴纸&#xff0c;贴于档案之上&#xff0c;之前是用Excel建立一张表&#xff0c;通过拖动单元格大小&#xff0c;调整文本位置&#xff0c;实现标签贴纸的打印功能。 后来&#xff0c;公司每月都会新招入一批员工&#xff0c;每次打印贴纸时&…

Linux学习之变量引用和作用范围

使用${变量名}或者$变量名就可以引用变量&#xff0c;$变量名其实是${变量名}的省略写法。 要是变量名后边还有其他字符就需要加上{}&#xff0c;比如helloToBash这个变量的值是Hello Bash&#xff0c;而需要输出的字符串是“Hello Bashing”&#xff0c;这样就需要加上{}&…