Radix UI 包含低层级的 Radix Primitives 与提供默认视觉的 Radix Themes。Primitives 官方定位是用于构建高质量、可访问设计系统和 Web 应用的基础组件,重点在行为、WAI-ARIA 模式、组合和开发体验;它不会替团队决定品牌外观。
先选择 Primitives 还是 Themes
| 目标 | 更合适的层 |
|---|---|
| 完全自建视觉系统 | Radix Primitives |
| 需要现成基础样式 | Radix Themes |
| 只补一个复杂交互 | 增量采用单个 Primitive |
| 建设跨产品组件库 | Primitives + 内部封装 |
两者可以组合,但要明确样式所有权。
Primitive 解决浏览器缺失的行为
Dialog、Popover、Select、Dropdown Menu、Tabs 等控件需要键盘导航、焦点管理、ARIA 属性和关闭逻辑。Radix 提供这些底层行为,业务团队再决定 DOM 组合、视觉与内容。不要在封装时移除必要部件或用普通 div 替换触发器。
组合式 API 要保持结构关系
Root、Trigger、Content、Item 等部件可灵活排列,并通过 asChild 接入自定义元素。灵活不代表任意嵌套:触发器必须可聚焦,Label 与 Description 要正确关联,Portal 内容需考虑层级、容器和事件边界。
受控与非受控状态统一选择
- 简单局部交互可使用默认状态;
- 路由、表单或跨组件联动使用受控状态;
- 避免同一组件同时维护两份 open/selected;
- 异步关闭时保留 loading 与错误反馈;
- 服务端渲染检查初始值和 hydration。
样式依赖状态属性
Primitives 会暴露 data-state、data-disabled、data-side 等信息,团队可用 CSS、Tailwind 或其他方案设样式。设计系统应将这些状态集中映射为 token 和组件变体,不要让每个页面各写一套选择器;动画也应覆盖打开与关闭阶段。
Portal 与层叠上下文需要调试
Dialog、Popover 和 Tooltip 常通过 Portal 渲染,容易与固定导航、transform 容器和 z-index 体系冲突。建立统一 overlay 容器和层级表,检查滚动锁、点击外部、嵌套弹层与移动端软键盘,不能用不断加大 z-index 解决。
封装后才是团队组件
将选定 Primitive 包装成 Button、Dialog、Select 等内部组件,固定 token、尺寸、错误状态、埋点和测试。记录 Radix 版本与本地扩展,升级时回归键盘、焦点、屏幕阅读器和 Portal;底层可访问性是起点,业务组合仍需验收。
数据统计
相关导航
基于 React 19、Tailwind CSS v4 与 React Aria Components 的开源可访问组件库
daisyUI
作为 Tailwind CSS 插件提供语义化组件类、主题系统与跨框架 HTML 结构的 UI 库

Ant Design
面向企业级 React 应用的设计系统与组件库,覆盖复杂表单、数据展示、反馈和主题定制
Arco Design
字节跳动推出的企业级设计系统,提供 React、Vue 组件、图标与主题定制工具
Magic UI
面向营销页与用户侧页面的 React、TypeScript、Tailwind CSS 和 Motion 动效组件集合
Mantine
覆盖组件、Hooks、表单和扩展包的 React UI 工具集,采用原生 CSS 与 Styles API 定制
Element Plus
面向 Vue 3 的桌面端组件库,提供表单、数据展示、反馈、导航与主题定制能力

Tailark
面向营销站的 shadcn / Tailwind 组件块
暂无评论...


