Base UI 是由 Radix、Floating UI 和 Material UI 的创建者们开发的无样式 React 组件库,现已发布 1.0 版本。经过两年的开发,该项目正式进入稳定且可用于生产环境的阶段。此次发布包含 35 个可访问性组件、包命名变更,以及专职团队对长期维护的承诺。
与早期版本相比,1.x 版本在开发者体验方面进行了多项优化,包括包重命名、基于 Radix UI 经验教训改进的组件 API,以及所有组件可访问性功能的增强。此外,本次发布还包含性能优化,以及与 Tailwind CSS、CSS Modules 和 CSS-in-JS 库等主流样式解决方案更好的集成。
此次发布对包进行了重命名,从 @base-ui-components/react 改为 @base-ui/react。这一重大变更要求开发者对 import 语句和 package.json 依赖做出修改。组件导入语法基本保持不变,使现有用户能够平稳过渡。更新后的导入语法示例如下:
import { Popover } from '@base-ui/react';使用 Base UI 构建应用的开发者受益于该库的无头架构,它在提供完整样式控制的同时保持了强大的可访问性功能。与传统捆绑了主观样式的组件库不同,Base UI 组件完全无样式,允许团队自主实现设计系统,无需受默认 CSS 的束缚。这些组件处理复杂的交互模式、键盘导航、焦点管理和 ARIA 属性,确保开箱即符合 WCAG 标准,同时赋予开发者自由选择组件样式的权利。
相较于竞争对手(如 Radix UI 和 Headless UI),该项目提供了不一样的支持和长期承诺,彰显了自身的特色。Radix UI 在被收购后面临不确定性,而 Base UI 由 MUI (这是一家拥有工程师、设计师和专职项目经理的公司)提供支持,这增强了 React 社区的信心。Hacker News 上的开发者对其稳定性表示赞赏,并表现出采用该库的强烈意愿。
在 Reddit 上,一位用户询问为何将该版本定位为 Radix 的继任者:
好奇你们为何将其定位为 Radix 的继任者?具体来说,Radix 存在什么问题,以至于需要全新的 UI 库来解决?
对此,有人解释道:
这是为了说明,由于 API 相似,从 Radix 迁移到 Base UI 非常容易。
对于考虑使用 BaseUI 的开发者,有用户在同一个 Reddit 帖子中就其与 Ariakit 或 React Aria 的比较提出了疑问:
我为什么要选择这个而非 Ariakit 或 React Aria?它有哪些功能是其他库所不具备的?
Base UI 维护者 (_doodack) 回复道:
React Aria 的 API 差异较大。有些开发者喜欢,有些则不喜欢。它在 React 树中渲染大量的上下文 Provider,与其他组件库混合使用可能颇具挑战性。相比之下,我们的 API 与 Radix 和 Ariakit 更为接近。
他们继续写道:
我们还具备一些其他库所没有的功能,比如"分离触发器"——这一功能可用于在不同触发器之间复用同一个弹出元素。
Base UI 1.0 还针对众多组件进行了具体改进,解决了边界情况并提升了可靠性。Combobox 组件现在能正确处理 itemToStringValue,并允许将 null 作为 value 属性的选项。Menu 组件修复了子菜单零延迟打开的问题,并确保按下 Escape 键时焦点正确返回到触发器。Select 组件也做了类似的表单处理和 null 值支持改进。性能优化则覆盖全库,重点在于减少了不必要的重渲染并提升了运行时效率。
Base UI 是由 MUI 以及 Radix 和 Floating UI 项目的核心贡献者共同维护的开源 React 组件库。它专注于可访问性、可组合性和开发者体验,提供可与任何样式解决方案无缝配合的低级 Hooks 和无样式组件。Base UI 专为需要构建自定义设计系统和应用的团队打造,适用于视觉控制与可访问性同等重要的场景。
原文链接:





