useId 用于生成唯一且稳定的 ID,主要用于 DOM 元素和 ARIA 属性关联。

useId Hook 详解

useId 用于生成唯一且稳定的 ID,主要用于 DOM 元素和 ARIA 属性。

// 基本语法

const id = useId();

// 单个元素
<input id={id} />

// 多个相关元素(前缀模式)
<input id={`${id}-email`} />
<input id={`${id}-password`} />

示例 1: 基本用法

生成的 ID: _R_p9inpfivdb_

生成的 ID: _R_199inpfivdb_

生成的 ID: _R_1p9inpfivdb_

说明: 每个 SimpleInput 组件实例都获得唯一的 ID, 用于关联 label 和 input。点击 label 文字可以聚焦对应的输入框。

示例 2: 前缀模式

基础 ID: _R_1pinpfivdb_

ID: _R_1pinpfivdb_-email

ID: _R_1pinpfivdb_-password

(ID: _R_1pinpfivdb_-remember)
技巧: 使用一个基础 ID 加不同后缀,可以为同一组件内的多个元素生成相关联的唯一 ID。

示例 3: ARIA 属性关联

无障碍性说明:

  • aria-describedby 将按钮与 tooltip 关联
  • 屏幕阅读器会读出 tooltip 内容
  • 每个 tooltip 都有唯一的 ID

示例 4: 复杂表单组件

3-20个字符,只能包含字母和数字

IDs: input=_R_qpinpfivdb_, error=_R_qpinpfivdb_-error, desc=_R_qpinpfivdb_-description
IDs: input=_R_1apinpfivdb_, error=_R_1apinpfivdb_-error, desc=_R_1apinpfivdb_-description

请输入您的真实年龄

IDs: input=_R_1qpinpfivdb_, error=_R_1qpinpfivdb_-error, desc=_R_1qpinpfivdb_-description
无障碍特性:
  • aria-invalid 标记错误状态
  • aria-describedby 关联错误/描述信息
  • role=“alert” 使屏幕阅读器立即播报错误

示例 5: Accordion 组件

useId 是 React 18 引入的 Hook,用于生成唯一且稳定的 ID, 特别适用于需要 SSR 支持的场景。

ARIA 属性:

  • aria-expanded: 展开/折叠状态
  • aria-controls: 控制的面板 ID
  • aria-labelledby: 面板的标题

⚠️ 注意事项

  • 不要用于列表的 key - Hook 不能在循环中使用
  • 不要用于 CSS 选择器 - ID 包含冒号,需要转义
  • 不要用于数据 ID - 这是用于 DOM 元素的
  • 不要依赖具体值 - ID 格式可能会变化