组装式应用在前端行业的发展

简介: 近几年前端行业可以说是发生了翻天覆地的变化,虽然组件化开发一直都存在但是随着越来越多的优秀的前端框架和工具的出现,前端组件化开发变的越来越容易,进而前端组件化开发进入了高速发展的黄金时期。

什么是前端组件化

组件化并不是前端所特有的,组件化是一种编程思想,是一种拆分代码的方式。一些其他的语言或者桌面程序等,都具有组件化的先例。随着前端项目复杂度越来越高,组件化已经成为一种共识,它一方面提高了开发效率,另一方面降低了维护成本。组件化设计就是为了增加复用性,灵活性,提高系统设计,从而提高开发效率。但在前端领域,并没有很通用的组件模式,因为缺少一个大家都能认同的实现方式,所以很多框架 / 库都实现了自己的组件化方式。

前端组件化实践

目前对前端组件的理解是分层,针对不同的需求将组件分为不同的种类,这种分类是一种规范,而不是规定。基本上我们可以将组件分为四类:

  • 基础组件:用于构建页面的原子组件,如 Button、Input、Select、Form 等等,这类组件通常用于取代 HTML 的原生组件,不仅可以实现基本功能,更重要的是可以支持各种样式定制、事件绑定和换肤等等,基础组件库里比较著名的是 AntDesign 和 ElementUI,可以毫不夸张的说现在的前端项目没有不使用基础组件库的;
  • 业务组件:基于基础组件构建出的一些更复杂的、可重用的组件,比如二维码组件、搜索框组件等等,这些组件都有很强的业务特征,并且需要通过基础组件进行组装,但是项目中又会频繁出现,对于这类组件,通常可以单独发布一个 npm 包,方便不同项目间进行重复使用。
  • 区块:由业务组件构成的更复杂的组件,用于构建页面的某个功能,比如表格区块,会包含:查询条件、表格和翻页器
  • 模块:由区块构成的整个页面,用于快速构建整个页面

组件设计原则

一个组件的复杂度,主要来源就是自身的状态;即组件自身需要维护多少个不依赖于外部输入的状态。
组件开发中,如何将数据和 UI 解耦,是最重要的工作。组件开发过程中,时刻谨记、思考是否符合以下的原则,可以帮助你开发一个更完善的通用组件。

  • 单一职责
    你的组件是否符合只实现一个职责,并且只有一个改变状态的理由?如:fetch 请求和渲染逻辑,应该分离。因为 fetch 请求时会造成组件重新渲染,渲染时的样式或数据格式变化,也会引起组件重新渲染。单一职责可以保证组件是最细的粒度,且有利于复用。但太细的粒度有时又会造成组件的碎片化。单一职责组件要建立在可复用的基础上,对于不可复用的单一职责组件,我们仅仅作为独立组件的内部组件即可。
  • 通用性
    组件开发要服务于业务,为了更好的复用,又要从业务中抽离。复用一个组件时,即复用其职责,所以只有单一职责的组件,是最便于复用的,当一个组件错误地有多个职责时,就会增加复用时的开销。尽量避免代码重复,重复两次及以上的代码。
  • 封装
    良好的组件封装应该隐藏内部细节和实现意义,并通过 props 来控制行为和输出。减少访问全局变量:因为它们打破了封装,创造了不可预测的行为,并且使测试变得困难。可以将全局变量作为组件的 props,而不是直接引用。
  • 组合
    具有多个功能的组件,应该转换为多个小组件。单一责任原则描述了如何将需求拆分为组件,封装描述了如何组织这些组件,组合描述了如何将整个系统粘合在一起。
  • 纯组件和非纯组件
    非纯组件有显示的副作用,我们要尽量隔离非纯代码。将全局变量作为 props 传递给组件,而非将其注入到组件的作用域中。将网络请求和组件渲染分离,只将数据传递给组件,保证组件职责的单一性,也能将非纯代码从组件中隔离。
  • 可测试
    测试不仅仅是自动检测错误,更是检测组件的逻辑。如果一个组件测试不易于测试,很大可能是你的组件设计存在问题。
  • 富有意义
    开发人员大部分时间都在阅读和理解代码,而不是实际编写代码。有意义的函数、变量命名,可以让代码具有良好的可读性。
相关文章
|
6天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
16 2
|
7天前
|
Rust 前端开发 JavaScript
前端性能革命:WebAssembly在高性能计算中的应用探索
【10月更文挑战第26天】随着Web应用功能的日益复杂,传统JavaScript解释执行模式逐渐成为性能瓶颈。WebAssembly(Wasm)应运而生,作为一种二进制代码格式,支持C/C++、Rust等语言编写的代码在浏览器中高效运行。Wasm不仅提升了应用的执行速度,还具备跨平台兼容性和安全性,显著改善了Web应用的响应速度和用户体验。
23 4
|
6天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
18 2
|
7天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
14 3
|
7天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
21 2
|
7天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
21 2
|
8天前
|
前端开发 JavaScript 开发者
“揭秘React Hooks的神秘面纱:如何掌握这些改变游戏规则的超能力以打造无敌前端应用”
【10月更文挑战第25天】React Hooks 自 2018 年推出以来,已成为 React 功能组件的重要组成部分。本文全面解析了 React Hooks 的核心概念,包括 `useState` 和 `useEffect` 的使用方法,并提供了最佳实践,如避免过度使用 Hooks、保持 Hooks 调用顺序一致、使用 `useReducer` 管理复杂状态逻辑、自定义 Hooks 封装复用逻辑等,帮助开发者更高效地使用 Hooks,构建健壮且易于维护的 React 应用。
20 2
|
21天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
|
21天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
34 0
|
21天前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。