您所在的位置:首页 / 行业动态

浅聊在 uni-app 中如何选择一个合适的 UI 组件库

2021.09.23

2956

uni-app 框架转眼已经发布了一年多,使用 uni-app 的开发者也是与日俱增。


浅聊在 uni-app 中如何选择一个合适的 UI 组件库

uni-app框架转眼已经发布了一年多,使用uni-app的开发者也是与日俱增。 因为uni-app是一个跨端框架,所以我们大多使用它就是为了同时一套代码跨多端,选择uni-app可以算是眼下一个比较好的选择。

无疑,uni-app是一个冉冉升起的新星,同样带给我们的一个问题就是与之配套的 UI 组件库却没有那么多的选择。 而我们开发应用,组件库又是一个不可或缺的辅助开发的利器。

那么有没有一个好用,且性能又比较不错的组件库供我们在uni-app中使用呢?

组件库选择

首先一个问题就是 UI 组件库怎么选择?

vue 组件库

因为uni-app是基于vue开发所有前端应用的框架,那么我们肯定首先想到的就是vue组件库可不可以用。

首先排除 PC 端的组件库如ElementUI、iview这些,可供我们选择移动端的 vue 组件库也有很多。
比如说Mint UI、Vant、Mui、vonic等等。

我们知道uni-app虽然基于vue开发,但是同时还要遵循小程序的开发规范。

所以像小程序开发一样,uni-app中同样的没有document、window对象。

而且我们看到官方文档中有提及到:

uni-app只支持vue单文件组件(.vue 组件)。其他的诸如:动态组件,自定义 render,和字符串模版等,在非H5端不支持。

这就导致我们不能在uni-app中使用许多通常前端开发中的操作。所以纯前端开发的vue组件库在我们的uni-app中用起来,就显得有些困难了。可能需要改动许多代码,才能在uni-app中正常运行,或者干脆跑不起来。

小程序自定义组件库

既然说 vue 组件库不能使用,那么小程序组件库可以支持么 ?

答案是可以,小程序组件是得到官方支持的,详看小程序组件支持

但是需要注意的是,虽然支持了小程序组件,并不是说就能在全平台都能运行。我们选择uni-app本来就是为了跨端,而使用小程序组件库,却只能在对应的小程序平台使用,这显然也不再我们的预期内。

如果只兼容微信小程序平台这里推荐两个好用的组件库:

uni-app 组件库

那么想要在uni-app中开心的使用组件库,还是使用uni-app框架开发的组件库用起来更顺手。

好在uni-app有插件市场,给我们提供了很多的组件,但总归没有太多成体系的组件库。

那可供我们选择的只有官方的uni-ui组件库。

uni-ui

刚开始的时候,使用uni-ui简直是一言难尽,总感觉诚意不足。

不过随着uni-app的版本迭代,似乎官方也开始在uni-ui上花心思了。

一改之前的BUG不断,性能不足的窘迫。也开始奋起直追,目前uni-ui内组件还在不断的更新、优化,基本上可以维持我们项目的基本开发。

现在我为什么要推荐大家使用uni-ui而不是使用其他三方的组件库呢?

跨端能力

上述我们我们已经提到,使用vue组件库,基本上是行不通的,除非你有能力改造大量组件,来兼容uni-app,所以目前我们不推荐使用,看之后官方的更新,以及对vue前端组件的支持 。

小程序端的组件是可以支持的,但是也仅仅是支持对应平台。例如Vant Weapp、iView Weapp等小程序组件库也只是能在微信小程序平台运行,跨端能力远远满足不了我们的需求。

而uni-ui毕竟是uni-app亲儿子,能力虽有些不足,但是它也有自己的有优点,这点就表现在跨端能力上。

uni-ui的组件都是多端自适应的,底层会抹平很多小程序平台的差异或bug。

比如uni-swiper-action组件,在app、h5和微信小程序上会使用交互体验更好的 wxs 技术,但在不支持wxs的其他小程序端会使用js模拟达到类似效果,使我们在跨端的同时,而性能还能得到保障。而以上这些我们开发者只要拿来组件开箱即用。

不仅如此,uni-ui的组件还支持了 nvue 的原生渲染,妈妈终于不用担心我在nvue中没有组件可以用了。

更新数据

虽然uni-app支持小程序自定义组件。但小程序自定义组件的组件库都需要使用setData手动更新数据,在大数据量时、或高频更新数据时,很容易产生性能问题。

而uni-ui属于vue组件,uni-app引擎底层自动diff更新数据。哪怕遇到大数据和高频更新数据时,表现都会比手动setData要好很多。

插件市场里众多vue组件都具备这个特点。

优化逻辑层和视图层通讯折损

目前不论小程序还是app的webview渲染,全都是逻辑层和视图层分离的。

这样就会涉及到逻辑层和视图层的一个通讯问题。比如在视图层拖动一个可跟手的组件,由于通讯的损耗,用js监听很难做到实时跟手的操作。

这时就需要使用css动画以及平台底层提供的wxs、bindingx等技术。不过这些技术都比较复杂,所以uni-ui在在需要跟手式操作的ui组件里做了封装,比如uni-swiper-action列表项左滑菜单,就在底层使用了这些技术,实现了高性能的交互体验。

总结一下

尽管现在uni-ui可能在某些方面还不是很完美,但是在uni-app框架中无疑是优先的选择。

无论是uni-ui的跨端能力还是性能,在小程序和混合app领域,暂时还没有比uni-ui更好的选择。

如果大家有什么更好的建议,或者很棒的实现,都可以到uni-ui的github上提 IssuesPR,共同维护起来一个好用的 UI 组件库。

uni-ui 组件库 github 地址:github.com/dcloudio/un…

Tips

  • 以上部分分析来自uni-ui官方说明 ,就个人使用而言,也算是比较客观的
  • 如果有什么错误、或者描述错误,请欢迎指正

相关新闻

微信会员卡能力全面升级

2016.05.18

3682

微信卡券团队对会员卡能力进行全面升级。在原有能力的基础上,将新增自定义卡面、一码多用、支付后模板消息、按会员标签分组群发消息等能力,卡券消息能力也进行了升级,旨在帮助商家更好地进行会员管理。

像滤镜一样改变字体颜色

2018.09.20

5291

标题是什么意思?可能一开始觉得怪怪的,字体颜色不就是一个css的样式就改变了吗? css样式是改变整个字体的颜色,但是怎么改变半个甚至0.3333...个字体的颜色呢?

小程序模板消息能力调整,长期性订阅消息终于来了

2019.10.15

3278

尽管部分运营者还在传授如何运用模板消息召回用户的运营技巧,但对部分开发者而言,模板消息已经成了食之无味弃之可惜的存在。与其再在模板消息上下功夫,不如好好研究一下如何从「用户分享」和「最近使用」这些更重要的入口召回用户