用 uni-app x 写跨端应用,框架实现了「一套代码 + 原生性能」,但组件生态一直是块短板:表单、弹层、导航、骨架屏这些轮子,每个项目都自己造一遍并不现实。最近在技术选型时整理了一下 uni-app x 生态里的组件库,把 uvx-ui 的调研笔记记录下来,主要包括它是什么、设计上的几个特点,以及接入的实际体验。

uvx-ui 是什么

一套用 UTS + UVue 编写、专门面向 uni-app x 的跨端 UI 组件库:App 端编译为原生界面、不走 WebView,同一套组件代码跑在 Android、iOS、HarmonyOS、Web、微信小程序五端。

它的前身是 uv-ui,但不是把 Vue 组件直接搬过来,而是按 uni-app x 的强类型和原生渲染重新实现了一遍。所以两者是并存关系:老 uni-app 项目继续用 uv-ui,新 uni-app x 项目才需要 uvx-ui。

几个设计特点

从源码和文档看,这套库的几个设计特点对工程化比较友好:

  • 原生渲染:App 端不依赖 WebView,保留 uni-app x 的原生渲染能力,这也是 uni-app x 的核心价值;
  • UTS 强类型:属性、事件、方法全类型化,借助编译期能提前暴露问题;
  • 组件数量:源码 98 个组件,覆盖基础、表单、数据、反馈、布局、导航六类;
  • 主题方案:亮暗双主题自动跟随系统,通过 CSS 变量做品牌色定制;
  • 国际化:内置中文 / 繁体中文 / 英文语言包,业务侧可覆盖同名词条;
  • easycom:按规范配置映射后模板里直接使用,不需要逐个导入注册。

接入体验

从 DCloud 插件市场导入插件后,唯一必须手写的配置是 pages.json 里的一段 easycom 映射:

{
  "easycom": {
    "autoscan": true,
    "custom": {
      "^uvx-(.*)": "@/uni_modules/uvx-ui/components/uvx-$1/uvx-$1.uvue"
    }
  }
}

之后组件就能直接写进模板:

<uvx-page>
  <uvx-text type="main" text="第一个 uvx-ui 页面" :size="20" />
  <uvx-button type="primary" text="点击验证" @click="handleClick" />
</uvx-page>

有个细节值得注意:uvx-page 是它推荐的页面根容器,App 端内部用 scroll-view 解决了非 Vapor 模式下页面不可滚动的问题,根节点还会自动挂载亮暗主题作用域。用原生渲染开发过 App 的同学应该明白这类封装的价值——这类平台差异如果没有组件库兜底,每个页面都要自己处理一遍。

组件覆盖情况

分类代表组件
基础按钮、图标、图片、布局、文本、动画
表单日历、表单、输入框、选择器、评分、搜索、上传等
数据头像、徽标数、进度条、二维码、骨架屏、列表等
反馈模态框、消息提示、弹出层、滚动通知、遮罩层
布局单元格、折叠面板、宫格、轮播图、瀑布流
导航导航栏、底部导航栏、标签页、步骤条、吸顶

每个组件的属性、事件、插槽和平台兼容性差异不小,选型时建议按自己项目的组件清单逐个核对文档。

总结

整体来看,uvx-ui 适合这几类场景:已经确定 uni-app x 技术栈、需要覆盖鸿蒙或微信小程序、团队希望组件有强类型约束的项目。它目前是 1.0.0 版本,迭代比较活跃,组件的兼容性细节以官方文档为准(相关文档:www.uvxui.cn),源码在 Git 上以 MIT 协议开源,遇到问题可以提 issue 交流。

本文是选型调研笔记,如果有正在用 uni-app x 的同学,欢迎评论区聊聊你们的组件库选择。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐