学过网页的朋友都知道,制作一个网页离不开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.总结

到这里,我们就对前端组件化开发有了一个比较清晰的认识。前端技术的发展,就是从网页制作变成了网页应用的开发,网页不再是一个只用来展示的页面,而是一个应用程序。组件化开发是为了提高代码的可复用性,以及方便团队分工协作开发。

对于初学者来说,刚接触前端组件化开发时,会觉得前端现在变得好复杂,要学习的东西也变得很多。但是对于需要开发复杂的大型应用的企业来说,组件化开发能极大地提高开发效率,它让前端开发团队能高效地完成工作,是一个非常有用的技术。

组件化开发实战_一篇文章搞懂什么是前端“组件化”开发相关推荐

  1. c++ 计算正弦的近似值_一篇文章搞懂正弦保真性

    本文介绍数字信号处理中"正弦保真性"这一概念,想要更好地理解本文所述内容,建议读者先阅读<一篇文章搞懂卷积>. 正弦保真性定义 一个正弦信号作为线性时不变系统的输入时, ...

  2. reactrouter监听路由变化_一篇文章搞懂前端路由原理解析和实现方式

    在单页应用如此流行的今天,曾经令人惊叹的前端路由已经成为各大框架的基础标配,每个框架都提供了强大的路由功能,导致路由实现变的复杂. 想要搞懂路由内部实现还是有些困难的,但是如果只想了解路由实现基本原理 ...

  3. python装饰器函数执行后日志_一篇文章搞懂Python装饰器所有用法

    如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起 ...

  4. 一篇文章搞懂最流行的容器化技术Docker

    说在前面的话 本篇文章什么样的人适合看? 刚入门学习docker的,看完对docker会有一个通篇的认识 有经验的人,在知识大爆炸时代,技术很多,没有人能记住所有东西,适合复盘的时候看 我想说的话:这 ...

  5. 一篇文章搞懂filebeat(ELK)

    一篇文章搞懂filebeat(ELK) https://www.cnblogs.com/zsql/p/13137833.html 目录 一.filebeat是什么 1.1.filebeat和beats ...

  6. c++ socket线程池原理_一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题...

    编辑:业余草来源:https://www.xttblog.com/?p=4946 一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题. ThreadLocal 相信不 ...

  7. 【一篇文章搞懂】什么是分布式锁?为什么要用分布式锁?看这篇文章准没错!

    简介 HikariCP 是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,和 dr ...

  8. 一篇文章搞懂架构师的核心技能

    " 这是架构师系列的第一篇:核心技能,希望这个系列能完全揭示架构师这个职位:我先从核心技能开始,后续还有架构师之路,架构实战等架构师系列文章. 本文作者 陈睿 优知学院创始人,前携程定制旅游 ...

  9. 【一篇文章搞懂】,字节跳动厂内部超高质量Flutter+Kotlin笔记

    开头 面试时间:2021.2.9 1~3面.2021.2.13 4~6面.2021.2.26 HR面 面试部门 + 岗位:商业化 - 高级 Android 开发工程师 面试感想:整体面得比较累,基础面 ...

最新文章

  1. Google Test(GTest)使用方法和源码解析——模板类测试技术分析和应用
  2. Xamarin.Forms特殊的视图BoxView
  3. 这几天研究了一下JDK14,发现它处理NPE的方式,真香!
  4. java继承的生活例子,帮你突破瓶颈
  5. usb管控软件_数据防泄密软件介绍
  6. oracle能不能改外键属性,CSS_小议Oracle外键约束修改行为(五), Oracle的外键用来限制子表 - phpStudy...
  7. ActiveMQ学习-Network connectors JAVA代码实现
  8. java的IO操作之--RandomAccessFile
  9. crontab 里不能运行expdp
  10. alitum designer 的PCB生成gerber文件步骤
  11. Multisim高频电子线路4.7振荡器仿真
  12. Android 下载Zip文件,并解压到本地
  13. (附源码)计算机毕业设计SSM教务排课管理系统
  14. 计算机端口怎么配置波特率,怎么查看车载导航端口号、波特率和取码方式?
  15. python 爬取taptap热门榜
  16. html5 paint,html5实现仿windows画图工具的画图工具jspaint
  17. R语言实现结构方程模型
  18. Git操作流程(非常详细)
  19. 手机号已经绑定微信号,现在怎么再注册一个微信号
  20. Combining Deep Learning with Information Retrieval to Localize Buggy Files for Bug Reports

热门文章

  1. html元素以开始标签起始,HTML文本
  2. layuiadmin上手好难_成功男士的好搭档:松下ES-CV50电动剃须刀上手体验分享
  3. 利用计算机程序解决问题的基本过程,第四章第一节编制计算机程序解决问题
  4. hadoop 环境搭建
  5. 第八十四节,css布局小技巧及font-awesome图标使用
  6. screen实现关闭ssh之后继续运行代码
  7. DSP与STM32区别
  8. lightoj 1031 区间dp
  9. 《城市建筑美学》读书笔记
  10. JSP/Servlet中的汉字编码问题