前言
这篇文章是笔者写组件设计的第四篇文章,之所以会写组件设计相关的文章,是因为作为一名前端优秀的前端工程师,面对各种繁琐而重复的工作,我们不应该按部就班的去"辛勤劳动",而是要根据已有前端的开发经验,总结出一套自己的高效开发的方法.作为数据驱动的领导者react/vue等MVVM框架的出现,帮我们减少了工作中大量的冗余代码, 一切皆组件的思想深得人心.所以, 为了让工程师们有更多的时间去考虑业务和产品迭代,我们不得不掌握高质量组件设计的思路和方法.所以笔者将花时间去总结各种业务场景下的组件的设计思路和方法,并用原生框架的语法去实现各种常用组件的开发,希望等让前端新手或者有一定工作经验的朋友能有所收获.
今天要来实现一个高可定制的进度条组件,在介绍组件设计之前,我们先牢记以下几个原则.
每日一学: 组件设计三原则
高内聚, 低耦合(尤其是vue/react组件中, 降低组件之间的耦合尤为重要)
组件边界划分清晰(每一个组件都有自己清晰的边界划分)
单一职责(每一个组件只负责某一特定的表现或者功能)
如果对于react/vue组件设计原理不熟悉的,可以参考我的上一篇文章:
《精通react/vue组件设计》之用纯css打造类materialUI的按钮点击动画并封装成react组件
正文
在开始组件设计之前希望大家对css3和js有一定的基础.我们先看看实现后的组件效果:
上图可以知道封装后的进度条组件通过对外暴露的接口(react/vue里面可以看做props属性)可以很快的实现多个不同的表现和重用.我将会使用react带大家实现这个进度条组件, 大家不用担心技术栈不一样,因为react实现的组件可以很快套用于vue项目中, 所以说底层原理非常重要.
1. 组件原理和设计思路
由于组件设计的前提还是基于需求, 所以我们第一步是要确认需求. 一个进度条组件一般都会有如下需求点:
通过进度控制进度条长度
进度条总长度可以由用户来控制
随时修改精度条的额颜色(来自于设计师或产品经理独特而百变的审美)
当进度为100%时进度条可以自动消失(可能的需求)
进度提示文本(用户想知道当前长度下的具体进度, 比如体温计)
对于不同的进度节点,需要有不同的进度条颜色(比如游戏人物里的血, 快没血的时候为红色, 血满的时候为蓝色)
需求收集好之后,作为一个有追求的程序员, 会得出如下线框图:
这也是一个健壮的react/vue组件应有的思考角度.对于react选手来说,如果没用typescript,我建议大家都用PropTypes, 它是react内置的类型检测工具,我们可以直接在项目中导入. vue有自带的属性检测方式,笔者在这一点上认为vue还是很贴心的.
上面的思维导图我们也知道了, 进度条组件的实现原理就是通过对外暴露一定的属性,使用css先画一个进度条, 最后通过属性和样式之间的调度来实现我们需求满满的进度条.至于如何画进度条,下面会详细介绍.<