useId
是 React 18 引入的一个新的 Hook,它用于生成在客户端和服务器渲染期间都保持稳定的唯一 ID。这个功能在处理无障碍(a11y)、表单标签、以及需要唯一标识符的 DOM 元素时特别有用。useId
提供了一种在组件树中生成唯一且稳定标识符的方式,无论是在客户端还是服务器渲染中。
应用场景
- 关联标签和输入框:在表单中,
label
标签通过for
属性与对应的input
控件相关联。使用useId
可以确保这些元素的 ID 是唯一的,从而提高表单的无障碍性。 - 动态内容的唯一标识符:在生成动态内容(如列表)时,需要为每个元素分配唯一的键(key)。
useId
可以帮助生成这些键,确保它们的唯一性。 - 组件库:当开发可重用的组件库时,
useId
可以确保组件实例拥有唯一的标识符,避免在一个页面上使用多个相同组件时产生的 ID 冲突问题。
代码示例
下面是一个使用 useId
的示例,演示了如何在表单中关联 label
和 input
元素:
import React, { useId } from 'react';
function FormInput() {
const id = useId();
return (
<div>
<label htmlFor={id}>用户名:</label>
<input id={id} type="text" />
</div>
);
}
export default FormInput;
在这个例子中,我们首先使用 useId()
生成一个唯一的 ID,并将这个 ID 分别赋给 label
的 htmlFor
属性和 input
的 id
属性。这样做可以确保 label
与对应的 input
正确关联,即使页面上有多个 FormInput
组件实例也不会互相干扰,每个实例都会拥有唯一的 ID。
总结
useId
Hook 提供了一种简单而有效的方式来生成唯一且稳定的标识符,这在许多场景中都非常有用,特别是当处理表单和需要关联 DOM 元素时。通过使用 useId
,开发者可以更轻松地构建无障碍的 Web 应用,同时减少因重复 ID 导致的潜在问题。
原文链接:https://juejin.cn/post/7355311718065176613 作者:前端孺子牛