07-vue的组件化

news2025/6/21 10:44:11

文章目录

    • 1.概述
      • 存在的问题:
      • 那么如何解决这种状况:
    • 2.组件化
      • 1.基本概述
      • 2.优点

1.概述

对于前端来说,我们为用户创造价值才是特别需要关注的一个问题,这么多年过去了,前端到底为用户创造了什么价值呢?

在这里插入图片描述

70 年代,施乐公司做的一个软件管理的流程图软件,那个时代,整个的界面就是这个样子,施乐已经算比较先进的了。

再到 90 年代,当时这个画面还是很惊艳,按钮键是立体的。现在来看这个东西就有不那么美观了。

2006 年左右的时候,Vista 的界面已经开始有了一个非常大的变化了,这时已经是设计师在主导这个界面的了,但是性能并不佳。

再之后,手机出现了,比如 iPhone 的界面,这时不但交互模式发生了巨大的改变,而且屏幕也变了,甚至我们熟悉的鼠标不见了,变成了触屏。虽然两者之间操作上有一定的相似,但是变化还是非常大的。
在这里插入图片描述

计算机的功能也在演变。70 年代,计算机主要用来计算。

我们今天计算机主要用来上网,基本上,大家的计算机都是 24 小时联网的,你的手机也是 24 小时联网的,所以计算机的职责在发生变化。

这个变化对于 UI 有很大的影响,1970 年的那个 MVC 那篇论文里的图,model 很大,view 很小,而到了 2018 年,今天我们很多的 model,都是放在服务端的,而今天 model 的大小已经不是说一台机器上能去存的,你存在本地的只是视图展现一点点的 model,这个是很小的一部分的东西。而这部分,对应的可能是不同终端的view,view变得越来越大了。

存在的问题:

视图变的越来越重要,内容越来越丰富,技术上越来越复杂。一个页面内,可能有导航头,轮播图,滚动等动画,各种手势交互,信息流等与后端的交互。

通常我们会根据职责划分把交互都写在代JS文件里,布局都写在HTML里,样式写在CSS里面,当目标页面内容很少的时候,看起来没什么问题,但是当目标页面变得足够复杂,我们就会发现,JS里面的逻辑代码越来越多,如果一个手势交互,要同时触发页面的加载,滚动动画还有导航变动,那么开发者,要处理的情况就会很复杂。这个时候,如果另一个人来接手这个项目,或者又要加上一个新的交互去触发更多的联动。就会非常痛苦。

你也应该遇到过,将一个页面的几百行,甚至上千行的代码逻辑写在一个 js 文件中的情况。通常这种代码都很难读下去,更别说要维护起来,添加新功能,移除一些老功能了,因为你不知道改动一个地方,会不会出现意想不到的 bug。

这是因为很多时候,在项目开始时需求不多,所以就将一个页面做成了整块应用,而后随着业务的增长或者变更,项目的复杂富会呈现指数级的增长,等项目足够复杂后,就会发生一个小小的改动或者一个功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身的状况。
在这里插入图片描述

那么如何解决这种状况:

其实在此之前早就有了一些探索,如果一个大且复杂的场景能够被分解成几个小的部分,这些小的部分彼此之间互不干扰,可以单独开发,单独维护,而且他们之间可以随意的进行组合。拿电脑主机来说,一台整机包括CPU,主板,内存,硬盘等等,而这些部件其实都是由不同的公司进行生产的,他们彼此之间根据一套标准分别生产,最后组装在一起。当某个部件出现问题时,不需要将整台主机都进行维修,只需要将坏的部件拿下来,维修之后再将其组合上就可以了。这种化繁为简的思想,在前端开发中 就是: 组件化,后端就是微服务。

2.组件化

1.基本概述

现代化前端框架通常都是实现 MVVM 的方案,数据层(M)和 视图层(V)相互连接,同时变更,使得页面交互保持高度的一致性。

前端的组件涉及到更多的是展示和交互方面的逻辑。当然,前端组件与后端架构的微服务概念类似,可以理解成一个组件就是一个服务组件,只提供某个服务。

前端组件化开发,就是将页面的某一部分独立出来,将这一部分的 数据层(M)、视图层(V)和 控制层(C)用黑盒的形式全部封装到一个组件内,暴露出一些开箱即用的函数和属性供外部组件调用。

一个前端组件,包含了 HTML、CSS、JavaScript,包含了组件的模板、样式和交互等内容,基本上涵盖了组件的所有的内容,外部只要按照组件设定的属性、函数及事件处理等进行调用即可,完全不用考虑组件的内部实现逻辑,对外部来说,组件是一个完全的黑盒。

组件可以多层封装,通过调用多个小组件,最后封装成一个大组件,供外部调用。比如:一个 Input 输入框 是一个组件,一个 Select下拉选择框 也是一个组件,可以用 form 在这两个组件上包装一层,就是一个 Form 的组件

有一些比较常用的前端组件,像 vue-router,vuex,react-router,redux等,都是基于 Vue 和 React 的组件,它们只专注于 路由、状态存储 的工作。

只要利用好组件化开发,开发一个页面,就像是搭积木一样,将各个组件拼接到一起,最后融合到一起,就是一个完整的系统。

在这里插入图片描述

组件化以后,你的页面可能是这样的:
在这里插入图片描述

组件化以后你的项目可能是这个样子的:

在这里插入图片描述
在这里插入图片描述

2.优点

前端的组件化开发,可以很大程度上降低系统各个功能的耦合性,并且提高了功能内部的聚合性。这对前端工程化及降低代码的维护来说,是有很大的好处的。

耦合性的降低,提高了系统的伸展性,降低了开发的复杂度,提升开发效率,降低开发成本。

总结:

随着前端的发展,视图变的越发庞大,伴随而来的就是页面的内容越来越多,复杂度越来越高,开发者面临着,要为页面编写越来越多的代码,往往面临着,难以维护,代码不可复用,应对需求繁琐问题。

为了解决开发效率低,维护成本高的问题,引入前端组件化的思想。 我们希望一个大且复杂的场景能够被分解成几个小的部分,这些小的部分彼此之间互不干扰,可以单独开发,单独维护,而且他们之间可以随意的进行组合

组件化的核心思想:对内高内聚,对外低耦合。对内各个元素彼此紧密结合、相互依赖。对外和其他组件的联系最少且接口简单,可复用,可组合。

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

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

相关文章

Nacos2.2版本Tomcat启动报错

Nacos2.2版本Tomcat启动报错 错误日志 查看 logs/start.out,可以看到报错信息 2023-04-09 19:36:23,081 ERROR Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean wi…

Linux系统上如何禁用 USB 存储

Linux系统上如何禁用 USB 存储 为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。 为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。 我是艾西&…

手写一个Promise

Promise Promise是一个对象,用于解决异步变成的问题,由传统的异步回调为服务端立即调用优化为使用者者掌握回调主动权。 比如传统的JSONP,如下,在请求路由里添加回调函数,由接收请求的一方来调用请求,使用…

小白学Pytorch系列--Torch.nn API Vision Layers(15)

小白学Pytorch系列–Torch.nn API Vision Layers(15) 方法注释nn.PixelShuffle将形状张量(∗,Cr2,H,W)(*,C r^2,H,W)(∗,Cr2,H,W)中的元素重新排列为形状张量(∗,C,Hr,Wr)(*,C,H r,W r)(∗,C,Hr,Wr)&#x…

详细介绍React路由

路由 单页Web应用(single page web application,SPA),整个应用只有一个完整的页面,点击页面中的链接不会刷新页面,只会做页面的局部更新。数据都需要通过ajax请求获取, 并在前端异步展现。 一个路由就是一…

高通SDX12:ProSLIC Si32185移植调试

一、SLIC业务流程图 本次在高通SDX12平台上支持语音芯片Si32185大致流程如下: 驱动部分直接放在Kernel中,通过SPI注册设备创建字符节点,与硬件建立连接注册设备成功并在audio_kernel中正确配置FE、BE后,声卡会创建出来应用层直接放在apps_proc下,通过IOCTL操作驱动层,通…

操作系统、输入法和编码的理解

操作系统和输入法 操作系统有一个输入法管理器,叫做IMM,管理系统内的所有输入法,或者说一个输入法想要使用操作系统提供的输入法API,就必须在IMM进行注册。 应用程序和输入法 应用程序一般都会使用输入法,也就是调用输入法的api进行文字输…

Spring boot+Vue3博客平台:文章搜索与推荐和文章阅读统计模块

一、文章搜索与推荐功能 1.前端搜索功能实现 在文章列表组件中添加搜索框&#xff0c;用户可以输入关键字进行文章搜索。同时&#xff0c;在搜索结果下方展示相关文章推荐。 <template><div class"article-list"><div class"search">&…

手写vuex4源码(六)命名空间实现

一、命名空间使用 在子模块对象中添加 namespaced&#xff1a;true&#xff0c;为模块开启命名空间功能&#xff1b; 开启命名空间功能&#xff0c;相当于为每个模块添加独立的作用域&#xff0c;实现模块间状态和事件的隔离&#xff1b; 二、命名空间实现逻辑 在模块注册阶…

Vue3+Typescript+Vitest单元测试环境+组件测试基础篇

上一章我们把环境配置好了&#xff0c;并且进行了最简单的一个单元测试Vue3TypescriptVitest单元测试环境基础用例篇 现在让我们去编写一个最简单的组件 这个代码包含最简单的部分&#xff0c;就是一个按钮&#xff0c;接受一个内容插槽、自身有一个button样式 了解相关API…

JavaWeb——File类和InputStream,OutputStream类详解

目录 一、File类 1、定义 2、属性 3、构造方法 4、方法 &#xff08;1&#xff09;、获取文件路径 &#xff08;2&#xff09;、文件的创建和删除 &#xff08;3&#xff09;、目录的创建 二、InputStream和OutputStream 1、InputStream &#xff08;1&#xff09;、…

从头创建一个新的浏览器,这合理吗?

从头构建一个新浏览器&#xff1f;这如果是不是个天大的“伪需求”&#xff0c;便是一场开发者的噩梦&#xff01; 要知道&#xff0c;如果没有上百亿的资金和数百名研发工程师的投入&#xff0c;从头开始构建一个新的浏览器引擎&#xff0c;几乎是不可能的。然而SerenityOS系统…

AI风暴 :文心一言 VS GPT-4

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 文心一言 VS GPT-4 文心一言&#xff1a;知识增强大语言模型百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动&#…

代码随想录Day49

今天继续学习动规解决完全背包问题。 322.零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;…

虹科分享 | 使用IOTA检查受3CX DLL旁加载攻击影响的客户端 | 网络性能监控

2023年3月底&#xff0c;VoIP制造商3CX&#xff08;流行的互联网语音协议&#xff08;VoIP&#xff09;专用交换机&#xff08;PBX&#xff09;电话系统的开发商&#xff09;遭到DLL旁加载攻击。他们的软件被大约60万家公司和1200万用户使用&#xff0c;其中包括梅赛德斯-奔驰、…

人工智能中的监督学习到底是啥?其应用方向有哪些?

人工智能&#xff08;Artificial Intelligence, AI&#xff09;是一门致力于使机器能够像人类一样进行智能决策和行为的学科。监督学习&#xff08;Supervised Learning&#xff09;是人工智能领域中的一种重要学习方式&#xff0c;通过使用标注好的样本数据来训练模型&#xf…

零基础如何入门网络安全?【2023最新】

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全&#xff0c;需要相关资源学习。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

Linux 操作系统原理 — 内核协议栈收包/发包流程

目录 文章目录目录关键技术NIC DMAKernel 中的 sk_buff 与 sk_bufferKernel 中的 Rx/Tx RingBuffer Descriptor Table中断收包机制NAPI 收包机制多队列网卡内核协议栈收包/发包流程概览内核协议栈收包流程详解驱动程序层&#xff08;数据链路层&#xff09;VLAN 协议族Linux Br…

基于MATLAB的语音识别仿真系统

本文实现的语音识别系统&#xff0c;主要是对语音识别的特征参数的提取和识别模型的匹配&#xff0c;进行深入的研究。首先,对语音识别进行了概述&#xff0c;给出了语音识别的系统框架。然后就是如何实现语音识别的问题&#xff0c;这个过程可分为两个部分:第一个是语音特征参…

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

前两天考完蓝桥杯稍微休息了一下&#xff0c;昨天做了一个动画控制&#xff0c;但是想到写出来可能会字很多&#xff0c;我就搁置到今天来写了&#xff0c;unity learn是一个官方教程平台&#xff0c;里面有unity assert store的配套教程&#xff0c;全是文档&#xff0c;比看视…