SuperAPI AI 工具集

base-ui

前端与建站

查看项目

更新于 10-15 15:16

技能介绍

Base UI(React)是一套无样式(unstyled)、可组合的 React 组件集合。该技能的重点在于:如何组装多部件组件、如何通过 render prop 进行组合,以及在自行提供样式的前提下满足无障碍(accessibility)要求。

一、用途 Base UI 面向需要自行掌控视觉样式的 React 项目,组件本身只负责行为与无障碍,不提供默认外观。适合在已有设计系统或自定义 CSS 方案(CSS、Tailwind、CSS Modules)之上构建可访问的交互组件。

二、组件范围(按参考文档分类)

  • 工具类:csp-provider、direction-provider、merge-props、use-render。
  • 表单与输入:form、fieldset、input、number-field、otp-field、radio、select、slider、switch。
  • 反馈与状态:meter、progress、toast。
  • 菜单、导航与浮层:drawer、menu、menubar、navigation-menu、popover、preview-card、tooltip。
  • 开关与控制:toggle、toggle-group、toolbar。
  • 布局与分隔:scroll-area、separator。

三、核心概念

  • 无样式原语:所有视觉效果来自你自己的 CSS/Tailwind/CSS Modules,Base UI 负责行为与无障碍。
  • 多部件结构:多数组件遵循 Root + 子部件(Trigger、Popup、Item 等)的形式,需要显式组装。
  • render prop:可替换默认元素或用自定义组件包裹;使用函数形式时需用 mergeProps 手动合并 props。
  • 状态驱动样式:许多部件暴露 data 属性,如 data-[popup-open]、data-[highlighted]、data-[pressed]、data-[checked]、data-[invalid] 等。
  • 浮层使用 Portal:popover、menu、tooltip、select、navigation menu 内容、preview card 等使用 Portal + Positioner + Popup。

四、使用方式(资料中的配方)

  1. 快速构建可访问表单:用 Form 包裹输入以处理提交与错误聚合;使用 Field.Root(带 name)配合 Field.Label、Field.Control、Field.Error;用 Fieldset.Root + Fieldset.Legend 分组;Radio 组可用 RadioGroup 配 aria-labelledby,或通过 Fieldset.Root 渲染并用 Field.Label 标注每个选项;确保每个表单控件都有可访问名称。
  2. 用 render + mergeProps 组合:向 render 传 React 元素时 Base UI 自动合并 props;传函数时需用 mergeProps 合并;在合并的事件处理器中可用 event.preventBaseUIHandler() 阻止 Base UI 内部行为(仅限合成事件)。
  3. 浮层与菜单:用 Root + Trigger + Portal + Positioner + Popup 构建弹层;菜单与导航按需加入 Item、Separator、Arrow 及列表/视口部件;NavigationMenu.Link 支持 render 以适配框架路由链接。
  4. Toast:用 Toast.Provider 包裹应用或子树;用 Toast.useToastManager() 创建 toast;在 Toast.Portal 内渲染 Toast.Viewport,再将 toast 映射为 Toast.Root,配合 Toast.Content、Toast.Title、Toast.Description、Toast.Close。
  5. RTL 与 CSP:RTL 需用 DirectionProvider 包裹并同时设置 dir="rtl"(provider 不会设置 DOM 方向);严格 CSP 下用 CSPProvider 传入 nonce,或禁用内联样式元素;注意内联 style 属性不受 CSPProvider 控制。
  6. 滑块与范围:单值滑块渲染一个 Slider.Thumb;范围滑块传入数组并为每个值渲染一个 Slider.Thumb,并加 index 以对齐 SSR;需要边缘对齐时用 thumbAlignment 调整。

五、版本要点(资料摘要)

  • v1.7.0–v1.8.0:Combobox 新增 createItems 集合 API;Avatar.Image 新增 keepMounted;Toast 支持基于当前 toast 的函数式更新,render prop 在 Toast.Title/Description/Action 中生效;Autocomplete 与 Combobox 发出 input-press 与 cancel-open 变更事件详情,内联 Combobox 暴露 expanded 状态;Combobox.Item 与 Select.Item 继承根节点的 disabled 状态;Form 聚焦文档顺序中第一个无效字段,Field 在异步校验进行中发布中性有效性;其余多为无障碍、弹层行为修复与体积缩减。
  • v1.6.0:OTPFieldPreview 命名空间更名为 OTPField,需更新引用该预览命名空间的导入;修复 Accordion、Alert Dialog、Autocomplete、Avatar、Checkbox、Dialog、Drawer、Field、Menu、Number Field、OTP Field 等组件的行为问题。
  • v1.5.0:OTPField 用 normalizeValue() 取代 sanitizeValue(),改进键盘快捷键与校验组合行为;基于弹层的组件更一致地遵循受控 open 状态(影响 Popover、Menu、PreviewCard 等);Form、Field、OTPField 不再使用旧的 flushSync 式校验时序,保留本地校验调度变通方案前需重新测试;修正 NavigationMenu、Popover、ScrollArea 的 RTL 行为;Drawer.Viewport 转发 style。
  • v1.4.1:mergeProps 正确转发多参数事件处理器;修复 display: contents 的可 Tab 性;修复快速悬停触发时的弹层尺寸与滚动容器内被裁剪项高亮清除。
  • v1.4.0:OTPField 作为一次性密码/验证码输入的预览原语;隐藏输入暴露 form 与 suppressHydrationWarning;render 警告与 preventBaseUIHandler() 运行时行为在组合组件中更可靠;Drawer、NavigationMenu、Select、Slider、Toast、Switch 等获得行为修复。
  • v1.3.0:Drawer 转为稳定(不再是预览);Autocomplete 与 Combobox 新增 InputGroup,Combobox、Select、Slider 新增 Label 部件;Drawer 新增 SwipeArea;Tooltip 新增 closeOnClick,Toast 可关闭全部 toast;Checkbox、Radio Group、Switch 改进自动 aria-labelledby 支持;v1.2.0 起的 render prop 支持(含惰性元素)仍然适用。

六、关键禁止事项

  • 不要省略输入框、滑块、开关或单选组的可访问标签。
  • 不要期望 Base UI 提供默认样式,需自行应用样式。
  • 需要脱离层叠/溢出上下文的浮层不要忘记使用 Portal。
  • 使用 render 函数形式时不要跳过 mergeProps。

七、输出期望 回答用户时提供:应使用的具体 Base UI 组件及其关键部件;简要组装方案(Root + 部件 + 相关 portal/positioner);无障碍与状态驱动样式的简短检查清单。

八、链接 文档、Releases、GitHub、npm(资料中未提供具体 URL)。

限制说明:资料未提供收费、价格、支持平台、性能效果等具体信息,暂未提供。