组件化开发实战_一篇文章搞懂什么是前端“组件化”开发
学过网页的朋友都知道,制作一个网页离不开HTML、CSS和JavaScript技术。对于初学者来来说,掌握这3门技术就已经很不容易了,为什么前端为什么又要搞出来一个“组件化”开发的概念呢?组件化开发到底有什么好处,它具体又是如何实现的呢?
为了搞懂这些问题,我们来看看在近几年中,前端技术是怎么发展的。
1.前端的崛起之路
在传统的开发模式中,往往是把前端的网页代码和后端的程序代码混合在一起,借助某种模板技术(如JSP、ASP、PHP)来在服务器端动态生成HTML页面。
在这种开发模式下,网页的每次改动都需要前后端人员共同参与才能完成,网站前后端的开发人员需要很大的沟通成本、协调成本。企业招人的时候,也不得不招一些既懂前端又懂后端程序员,来减少前后端开发人员的冲突。
例如,下面是一段JSP代码,我们可以看到,前后端语言是混在一起的:
在这段代码中,Java工程师不得不面对前端的HTML代码,前端工程师也不得不面对JSP的<%@ %>、<jsp>这些语法。
那有没有一种办法让前端和后端的代码彻底分开呢?那就得依靠前端技术的进步了。现在流行的前后端分离的开发模式,就是让后端只负责给前端提供数据,由前端负责整个页面的模板渲染、数据填充以及交互逻辑。
前后端分离之后,人们发现前端已经不再是传统意义上的网页了,它甚至还可以做成一个手机应用,或者做成是微信小程序那样的小型应用,它更接近于传统的B/S(客户端/服务器)架构,且仍然具备网页轻量级、无需下载和安装的优势。
2.前端为什么要组件化开发
组件化的目的,是为了让页面中的各个部分可以被复用,以减少重复的代码。另一方面,也可以更好地使团队分工协作,让不同的人负责编写不同的组件。
前端页面可以借助某种框架(如Vue.js、Angular、React)来实现组件化开发,使代码更容易复用。此时,一个网页不再是由一个个独立的HTML、CSS和JavaScript文件组成的了,而是按照组件的思想将网页划分成一个个组件,如轮播图组件、列表组件、导航栏组件等。将这些组件拼装在一起,就形成一个完整的网页了。
我们以京东商城首页为例,它的页面的各部分组件划分如下图所示。
3.传统开发 VS 组件化开发
我们来对比一下“传统开发”和“组件化开发”的区别。
在传统开发中,项目的目录结构一般是把HTML文件放在最外层,把CSS文件、JavaScript文件放在单独的目录中,如下图所示:
组件化开发是需要借助某一种框架来实现的,这里我们以Vue.js框架为例。Vue.js把项目划分成dist目录和src目录,其作用如下:
01
src目录表示源码目录,它存放编译前的代码;
02
dist目录表示编译结果目录,它存放最终生成出来的网页。编译这个过程是由前端的自动化构建工具来实现的。
下面我们来看一下某个Vue.js项目的目录结构图:
需要注意的是,src目录下存放的是一些组件,这些组件的代码不能被浏览器识别,它必须被前端构建工具编译到dist目录下才能被浏览器识别,如下图所示。
dist目录下的结构和传统开发的目录结构很像,外层有个index.html文件,样式和逻辑代码分别放在了css和js目录中。
dist目录下的文件都是由程序自动生成出来的,里面的代码都经过了压缩处理,以确保浏览器能正确识别并执行。但dist目录中的代码不具有可读性,如果用编辑器打开里面的文件,会发现里面的代码是难以阅读的,它只保证代码能被浏览器执行:
开发人员编写的代码保存在src目录下,这里面存放的是一些单文件组件,这些组件才是我们要重点关注的内容。
4.组件代码解析
使用Vue.js框架编写的单文件组件,以“vue”作为文件扩展名。当我们打开某个组件的文件后,会发现里面的代码主要分为3部分,即“模板代码”“逻辑代码”和“样式代码”,分别对应HTML结构、JavaScript逻辑和CSS样式,如下所示。
<template>模板代码
</template><script>逻辑代码
</script><style>样式代码
</style>
单文件组件中的这些代码,最终将被编译后放入一个完整的HTML页面中,这样就实现了把传统的一个完整的网页拆分成若干个组件,每个组件都有自己的HTML、CSS、JavaScript代码,当用到哪个组件时,只需在页面中引用哪个组件即可。
每一个项目都有一个最外层的模板index.html和最外层的组件App.vue,它们在项目中所处的位置如下所示:
最外层组件App.vue里面的代码在编译时会经过Vue.js的处理,它会被渲染到index.html中的一个id为app的<div>标签中,在index.html中我们可以找到这个标签:
页面中的组件是具有嵌套关系的,在最外层组件App.vue中,我们可以看到里面用到了一些子组件,这些子组件就是页面中的各个部分。App.vue代码如下。
在上图中,<mt-header>是页面头部组件,<mt-button>是按钮组件,<tabbar>是TAB栏组件,这些组件都以标签的形式来使用,标签的属性可以用来传递参数、绑定事件。
每个子组件都有自己的结构、逻辑和样式代码,子组件结构代码会被渲染到父组件对应的标签下,用来将子组件显示到页面中。
5.总结
到这里,我们就对前端组件化开发有了一个比较清晰的认识。前端技术的发展,就是从网页制作变成了网页应用的开发,网页不再是一个只用来展示的页面,而是一个应用程序。组件化开发是为了提高代码的可复用性,以及方便团队分工协作开发。
对于初学者来说,刚接触前端组件化开发时,会觉得前端现在变得好复杂,要学习的东西也变得很多。但是对于需要开发复杂的大型应用的企业来说,组件化开发能极大地提高开发效率,它让前端开发团队能高效地完成工作,是一个非常有用的技术。
组件化开发实战_一篇文章搞懂什么是前端“组件化”开发相关推荐
- c++ 计算正弦的近似值_一篇文章搞懂正弦保真性
本文介绍数字信号处理中"正弦保真性"这一概念,想要更好地理解本文所述内容,建议读者先阅读<一篇文章搞懂卷积>. 正弦保真性定义 一个正弦信号作为线性时不变系统的输入时, ...
- reactrouter监听路由变化_一篇文章搞懂前端路由原理解析和实现方式
在单页应用如此流行的今天,曾经令人惊叹的前端路由已经成为各大框架的基础标配,每个框架都提供了强大的路由功能,导致路由实现变的复杂. 想要搞懂路由内部实现还是有些困难的,但是如果只想了解路由实现基本原理 ...
- python装饰器函数执行后日志_一篇文章搞懂Python装饰器所有用法
如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起 ...
- 一篇文章搞懂最流行的容器化技术Docker
说在前面的话 本篇文章什么样的人适合看? 刚入门学习docker的,看完对docker会有一个通篇的认识 有经验的人,在知识大爆炸时代,技术很多,没有人能记住所有东西,适合复盘的时候看 我想说的话:这 ...
- 一篇文章搞懂filebeat(ELK)
一篇文章搞懂filebeat(ELK) https://www.cnblogs.com/zsql/p/13137833.html 目录 一.filebeat是什么 1.1.filebeat和beats ...
- c++ socket线程池原理_一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题...
编辑:业余草来源:https://www.xttblog.com/?p=4946 一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题. ThreadLocal 相信不 ...
- 【一篇文章搞懂】什么是分布式锁?为什么要用分布式锁?看这篇文章准没错!
简介 HikariCP 是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,和 dr ...
- 一篇文章搞懂架构师的核心技能
" 这是架构师系列的第一篇:核心技能,希望这个系列能完全揭示架构师这个职位:我先从核心技能开始,后续还有架构师之路,架构实战等架构师系列文章. 本文作者 陈睿 优知学院创始人,前携程定制旅游 ...
- 【一篇文章搞懂】,字节跳动厂内部超高质量Flutter+Kotlin笔记
开头 面试时间:2021.2.9 1~3面.2021.2.13 4~6面.2021.2.26 HR面 面试部门 + 岗位:商业化 - 高级 Android 开发工程师 面试感想:整体面得比较累,基础面 ...
最新文章
- Google Test(GTest)使用方法和源码解析——模板类测试技术分析和应用
- Xamarin.Forms特殊的视图BoxView
- 这几天研究了一下JDK14,发现它处理NPE的方式,真香!
- java继承的生活例子,帮你突破瓶颈
- usb管控软件_数据防泄密软件介绍
- oracle能不能改外键属性,CSS_小议Oracle外键约束修改行为(五), Oracle的外键用来限制子表 - phpStudy...
- ActiveMQ学习-Network connectors JAVA代码实现
- java的IO操作之--RandomAccessFile
- crontab 里不能运行expdp
- alitum designer 的PCB生成gerber文件步骤
- Multisim高频电子线路4.7振荡器仿真
- Android 下载Zip文件,并解压到本地
- (附源码)计算机毕业设计SSM教务排课管理系统
- 计算机端口怎么配置波特率,怎么查看车载导航端口号、波特率和取码方式?
- python 爬取taptap热门榜
- html5 paint,html5实现仿windows画图工具的画图工具jspaint
- R语言实现结构方程模型
- Git操作流程(非常详细)
- 手机号已经绑定微信号,现在怎么再注册一个微信号
- Combining Deep Learning with Information Retrieval to Localize Buggy Files for Bug Reports