通用属性
本页是各组件页的公共前提,说明所有组件共有的属性规则与落点。组件特有的属性见对应组件页。
属性透传
组件把本库未声明的属性原样透传到渲染出的根元素,className、id、style、data-*、aria-*、onClick 等可以直接写:
- 如果组件本身会往根元素固定写入同名属性,透传会失效,例如绝大多数组件的
aria-disabled由disabled参数计算,手动指定无效。 - 原生
defaultValue/defaultChecked不随透传落到 DOM。
ref 与内部元素
ref 指向根元素。要拿到内部元素或往内部元素传入属性,走组件提供的通道:
通用属性
几点说明:
disabled输出aria-disabled而非原生disabled:禁用后元素仍可被聚焦与朗读,原生disabled只写在真实的表单控件上。- 部分布局 容器的
disabled另有语义:FieldLayout只作用于字段本身;FieldsetLayout走原生<fieldset disabled>,会连带禁用整组内的控件;- 纯布局容器(
PanelLayout、StackLayout等)没有disabled。
title与accessKey的落点因组件而异:多数落在根元素,Button系落在内部锚点,输入框系落在内部<input>上。要给title配aria-*时先看组件页的落点说明。title的标签兜底随标签变化重算:标签视觉隐藏且未显式给title时以标签文本兜底;本工程每次渲染按当前label/invisibleLabel重算该兜底,后续改标签会联动更新(原版只在构造期求值一次,之后改标签title不变)。label接受任意可渲染的 ReactNode:0等可渲染节点按有标签处理,布尔值按无标签处理(原版只认非空字符串)。tabIndex={null}彻底移除tabindex属性:元素彻底不可聚焦,连编程聚焦也不成立——区别于-1的不进 Tab 序但仍可编程聚焦。flags不是每个组件都有:各组件按其形态接受不同的标志(如Button的primary/progressive、Icon的色彩变体),具体见组件页。
键盘与无障碍
键盘操作、焦点管理与 aria 属性按原版 OOUI 逐项对照实现,具体按键见各组件页。