您当前的位置:首页 > 互联网教程

怎样使用React进行组件库的开发

发布时间:2025-05-18 17:19:40    发布人:远客网络

怎样使用React进行组件库的开发

一、怎样使用React进行组件库的开发

1、这次给大家带来怎样使用React进行组件库的开发,使用React进行组件库的开发的注意事项有哪些,下面就是实战案例,一起来看一下。

2、最近针对日常业务需求使用react封装了一套[组件库],大概记录下整个开发过程中的心得。由于篇幅原因,在这里只对开发过程中比较纠结的选型和打包等进行讨论,后续再对具体组件的封装进行讨论。

3、我们都知道,组件化的开发模式对于我们的开发效率有着极大的提升,针对我们日常使用的基本组件进行封装,可以大量的简化我们对于基本UI的关注度,让我们的工作聚焦在业务逻辑上,很好的分离业务与基础UI的代码,使得整个项目更有调理,这也是我们要进行本组件库开发的原因。

4、然而现有React开源组件有很多,像ant-design和material-ui等等,是否需要花费精力打造适合自身团队的组件库往往需要酌情考虑。我们来看下我现有团队及业务的几个特点:

5、前端人员较多,需要相互协作,且有余力对组件进行开发

6、产品业务相对复杂,需对某些组件进行定制化开发

7、已经有成熟的设计规范,针对各种基础组件、基础样式等进行定义

8、目前的项目较为凌乱,第三方组件引用杂乱无章

9、可以看出,我们拥有封装自己组件的精力和基础,并且拥有通过基础组件封装改变目前开发现状的需求。所以,这件事情是我们应该并且需要尽快完成的事情。

10、针对组件库的封装,我们首先面对的是技术选型以及方案的规划。大概包括以下两点:

11、由于团队现有的项目都是基于React+Redux进行开发的,那我们选择的开发语言无疑是React。

12、针对css选择,虽然现在针对组件化开发,比较流行CSS Modules和CSS-IN-JS两中模块化解决方案,我们更希望我们的组件是可进行定制的。因此针对组件,我们以Sass作为预编译语言,提搞效率和规范性。配合css-modules,我们可以很方便的进行针对实际需求进行样式更改。例如我们有一个Tab组件,我们已经定义好了其通用的样式:

13、}而在业务中,针对某一个需求,我们需要针对Tab组件的样式进行微调。让其在激活(active)状态下border-color是蓝色的。你当然可以说,我们可以让我们的组件暴露出一些props,针对这些修改进行配置,传入不同的props对应不同的风格。但是我们往往无法满足所有的业务需求,不可能针对组件把各种样式都封装进去。针对这种方案,我们采用css-modules为其添加唯一的模块样式:

14、<Tab styleName="unique-tab"/>针对该模块,对其进行基本样式的修改:

15、}这样,针对该模块的定制样式,能很好的进行针对需求的样式定制,同时不对全局样式进行污染。

16、针对项目图标,计划使用svg-sprite方案。但是由于产品处于在不断迭代的过程中,新的图标不断在增加。目前我们并不会对图标统一进行打包,而是在每次进行组件打包的过程中,从项目中导入所有的图标。用以下方式进行引入:

17、import Icon from'@common/lib'

18、import errorIcon from'@images/error.svg'

19、<Icon link={errorIcon}/>其实更好的方式是针对所有的图标进行统一打包,生成svg-spirte文件(具体原理可以查询svg-sprite,在此不再赘述)。当我们进行使用时,只需直接引用即可,避免每次都进行打包,减少webpack处理依赖的时间:

20、<Icon type="error"/>开发流程和规范

21、针对开发流程和规范,我们遵循以下几个原则:

22、组件库完全独立于项目进行开发,便于后续多个项目进行使用等

23、组件库包含三种模式:开发,测试,打包,文档案例,区分不同的入口及状态

24、使用pure-renderautobind等尽可能保证组件的性能及效率

25、保证props和回调的语义性,如回调统一使用handleXXX进行处理

26、为了便于后续的扩展,我们更希望整个组件库完全脱离于项目进行开发。保证组件库仅对于最基本的组件进行封装,将项目UI代码与业务逻辑进行分离。

27、针对不同的模式下,我们有不同的文件入口,针对开发模式,我们启动一个dev-server,在里面对组件进行基本的封装,并进行调试。打包时,我们只需对组件内容进行封装,暴露统一的接口。在文档中,我们需要进行案例和说明的展示。所以我们在利用webpack的特性进行各种环境的配置:

28、npm run styleguide:build//文档打包组件库作为项目的最小力度支持,我们需要保证其最基本的渲染效率,因此我们采用pure-render/autobind等对其进行基本的优化。React有很多优化方式,在此不进行赘述。

29、针对组件库的打包,我们以UMD格式对其进行打包。webpack可以针对输出进行格式设置:(引自cnode)

30、“this”以 this的一个属性输出: this[“Library”]= xxx;

31、“commonjs”以 exports的一个属性输出:exports[“Library”]= xxx;

32、“commonjs2”以 module.exports形式输出:module.exports= xxx;

33、“umd”同时以 AMD、CommonJS2和全局属性形式输出。

34、 path: config.build.assetsRoot,

35、 filename: utils.assetsPath('js/[name].js'),

36、 chunkFilename: utils.assetsPath('js/[id].js'),

37、很明显,我们封装的是一个针对React的组件库,并不应该把React引用进去。一般我们可以采用externals的方式对其进行处理。

38、在这里,我们采用dll方式将其与其他第三方依赖统一进行打包,并将manifest.json和三方依赖的输出文件输出到项目中去,在项目中也使用dllReference进行引用。避免在项目中使用到这些依赖时重复进行打包。

39、同时,由于我们的组件库处于一个不断维护的状态。这就需要我们维持好项目库和项目之间的打包关系,具体的流程如图所示:

40、在每次进行项目打包的时候,首先检测UI库是否有更新,若没有更新,则直接进行打包。反之继续检测dll的依赖是否有变化,若有,则打包dll,否则直接打包组件库内容。然后将输出结果同步到项目中,再进行最终打包。

41、当然,以上的这些流程都是自动进行的。

42、一个完善的文档对于一个组件库是及其重要的,每个组件有什么样的配置参数,拥有哪些事件回调,对应的Demo和展示效果。假设没有这些,除了封装组件的人,没有人知道它该如何使用。但是写文档的过程往往是痛苦的,在这里推荐几个文档生成库,可以极大的简化文档工作:

43、docsify基于Vue的组件生成器,轻量好用

44、react-styleguidist基于React的组件库文档生成器,自动根据注释生成文档,支持Demo展示。超好用

45、bisheng ant design自己写的文档生成器

46、我们使用的styleguidist,可以将md自动转化为文档,支持在md内直接调用你封装好的组件并进行展示,简单好用。最后封装的文档大概长这样:

47、其实封装组件库这种工作有很多的东西值得琢磨和钻研,由于篇幅原因,在这里只对开发过程中比较纠结的选型和打包等进行讨论,后续再对具体组件的封装进行讨论。在书写的同时,不断参考下ant design这种优秀的组件库,能学到很多的东西。更深刻的理解封装组件的思想,是一个很好的过程。

48、相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

二、前端开发框架有哪些

虽然现在vue、React和Angular很火,学习的人也越来越多,但是如果只是开发PC端项目,如果是一套比较成熟的技术方案,也未必不能用jquery。

这里推荐QUICK UI前端框架,QUICK UI不仅仅是一个前端框架,而是专门面向企业开发的一整套前端解决方案。包括基础开发框架、100多种功能强大的UI控件、几十套精美的皮肤模板和近16万字的开发文档。而且它也同样是前后端分离的开发方式(没错,即使不是数据驱动,jquery机制同样也可以做到前后端分离)

趁这个机会介绍一下QUICK UI的几个亮点吧。

1、它的表格组件一直被用户誉为jquery中最好的表格,拥有良好的性能和兼容,包括实现跨行跨列的复杂表格、树形表、父子表、即时编辑表格等近100项功能点

2、表单控件种类非常丰富,几乎囊括了所有常见的表单元素类型,能够充分满足企业级应用的表单开发方面。

3、大量的图形化组件。例如矢量地图

4、跟其他框架的一个很大不同点是,它不仅仅是一套组件库,还包含了丰富的皮肤模板。例如响应式web类型:

5、最新版本中针对大数据的可视化展现方面,还推出了一系列的展示模板。

更多内容还是访问UI Leader中文官网吧:

三、前端常用的框架有哪些

给大家介绍几个在Web前端界比较优秀的前端框架。

Twitter出品的Bootstrap在业界是非常受欢迎的,以致于有很多前端框架都在其基础上开发,如我们熟悉的WeX5就是在Bootstrap源码基础上优化而来的。我相信大多数接触过前端开发的同学多少都了解过这个优秀的前端框架。Bootstrap是基于HTML、CSS和Javascript的,它简洁灵活,可以使得Web开发更加敏捷。

它提供优雅的HTML和CSS规范,在jQuery的基础上进行更加个性化和人性化的完善。兼容大部分jQuery插件,并包含了丰富的Web组件,如下拉菜单、按钮式下拉菜单、导航条、按钮组、分页、缩略图、进度条和媒体对象等。自带了13个jQuery插件,其中有模式对话框、标签页、滚动条和弹出框等。

Foundation框架总体来看要比Bootstrap略显高大上一点,但他们俩的设计理念都是非常清楚的,Bootstrap有引导的意思,它尝试处理你项目中的一切所需。Foundation有基础、地基及支柱的意思,给你项目中强有力的创造与支持。相对于Bootstrap丰富的组件及插件,Foundation仅提供了有限的几种元素,其目标是,即使你使用预定义的UI元素,也不应该与大家的网站长得太像。

而Bootstrap则致力于提供所有定义好的元素,这样使得看起来许多网站都差不多。Foundation默认不带图标集,它推荐使用开源字体图标。与Bootstrap一样,Foundation使用网格流式布局将网页划分为12列,针对不同的设备显示不同的列数,实现响应式布局。但Foundation不支持旧版本浏览器。其他特性如有兴趣可进一步了解。

Curl是一个命令行工具,用于通过 HTTP(s)、FTP和数十种其它协议进行请求。使用Curl可以进行文件下载、检查响应标题和自由访问远程数据。

在 Web开发中,Curl经常和 RESTful API一起使用,用于测试连接。

# Fetch the headers of a URL.curl-I 302 FoundCache-Control: privateContent-Type: text/html; charset=UTF-8Referrer-Policy: no-referrerLocation: : 258Date: Wed, 09 Aug 2017 11:24:01 GMT# Make a GET request to a remote API.curl is the number of days it takes Saturn to orbit the Sun.

Curl命令可能比上述代码更复杂。有许多选项用于控制 headers、Cookie、身份验证等。了解更多,请阅读Everything curl。

Tree是一个小型的命令行实用程序,它将目录中的文件以可视化的方式进行显示。它采用递归运行的方式,遍历每个级别的嵌套并绘制所有内容的格式树。这样就能快速的浏览并查找需要的文件。

tree.├── css│├── bootstrap.css│├── bootstrap.min.css├── fonts│├── glyphicons-halflings-regular.eot│├── glyphicons-halflings-regular.svg│├── glyphicons-halflings-regular.ttf│├── glyphicons-halflings-regular.woff│└── glyphicons-halflings-regular.woff2└── js├── bootstrap.js└── bootstrap.min.js

还可以使用简单的 regEx模式来过滤结果:

tree-P'*.min.*'.├── css│├── bootstrap.min.css├── fonts└── js└── bootstrap.min.js

根据维基的解释,Tmux是一个终端复用器。通俗的说,它是一个能将多个终端连接到单个终端会话的工具。

Tmux允许用户在终端中的程序之间切换,添加屏幕窗格,并将多个终端连接到同一个会话,使其保持同步。在远程服务器上工作时,Tmux特别有用,因为它允许用户创建新的选项卡,而无需再次登录。

du命令用于生成关于文件和目录的空间使用情况的报告。du很容易使用,可以递归地运行,遍历每个子目录并返回每个文件的大小。

du的常见用例是:当某个驱动器的空间不足,用户不清楚每个存储器的大小。使用此命令可以快速查看每个文件夹所占用的存储空间,从而找到占用最大空间的存储器。

AUI是最近流行起来的,作者声称是专为APIClound设计的一套框架,解决了许多移动端开发实际中遇到的许多问题,是一个纯CSS框架。使用容器+布局+模块的构建方式,JS辅助,更自由更灵活更易于扩展使用。遵循Google Material设计规范,完美适配各个机型。面向HTML5,使用CSS3实现动画交互,轻量级高性能。AUI是使用MIT License授权,你可以复制、出售。目前最新版本2.0。

这是称为妹子UI的开源框架,据称是中国首个开源HTML5跨屏前端框架。妹子UI以移动优先为理念,从小屏逐渐到大屏,实现响应式网页。Amaze UI包含20+个CSS组件、20+个JS组件,更有多个包含不同主题的Web组件。相比国外框架,妹子UI关注中文排版提供本地化支持。面向HTML5开发,使用CSS3来实现动画交互,轻量级高性能。

Frozen UI是一款开源,简单易用,轻量敏捷的移动端框架。基于手Q样式规范,目前全面应用于企鹅手Q增值业务中。基础样式效果简单色调清爽,社区活跃,组件自然不少。包括按钮、列表、表单、通知、提示条、弹出框、选项卡等等常用组件。还包括一个FrozenJs的JS组件库。可以在主流的Android和IOS上应用。基本样式使用离线包的方式减少请求提供快速接入方案。当然,根据网友反映,也存在大大小小的bug。不过总体来说,还是值得一用的。奇怪的是,Github上显示的最后更新时间是一年前,难道已经没人维护了吗?

# Running this will show the space usage of each folder in the current directory.# The-h option makes the report easier to read.#-s prevents recursiveness and shows the total size of a folder.# The star wildcard(*) will run du on each file/folder in current directory.du-sh*1.2G Desktop4.0K Documents40G Downloads4.0K Music4.9M Pictures844K Public4.0K Templates6.9M Videos

还有一个相似的命令 df(Disk Free),使用df会返回有关可用磁盘空间的各种信息。

以上介绍了现在热门的几个Web前端框架,以及它们的主要功能,希望对大家学习Web前端有所帮助。