useId — это хук из библиотеки React
Aria, предназначенный для создания уникальных идентификаторов
компонентов в рамках приложения. Он особенно полезен при работе с
динамическими элементами интерфейса, где требуется связать несколько
элементов через атрибуты id, htmlFor или
aria-labelledby. В отличие от обычного ручного присвоения
идентификаторов, useId обеспечивает надежность и
предотвращает конфликты при повторном рендере компонентов или в
серверном рендеринге.
import { useId } from 'react-aria';
function MyComponent() {
const id = useId();
return <input id={id} type="text" />;
}
Ключевые моменты:
useId() возвращает строку, которая гарантированно
уникальна внутри всей страницы.useId часто применяется для связывания
<label> с <input>:
import { useId } from 'react-aria';
function TextInput({ label }) {
const id = useId();
return (
<div>
<label htmlFor={id}>{label}</label>
<input id={id} type="text" />
</div>
);
}
Здесь htmlFor у <label> указывает на
идентификатор <input>, что обеспечивает корректную
доступность и взаимодействие с экранными ридерами.
Для улучшения доступности можно использовать useId для
создания связей между компонентами через ARIA-атрибуты:
import { useId } from 'react-aria';
function Alert({ message }) {
const id = useId();
return (
<div role="alert" id={id}>
{message}
</div>
);
}
function AlertButton() {
const alertId = useId();
return (
<div>
<Alert message="Ошибка загрузки данных" id={alertId} />
<button aria-describedby={alertId}>Показать сообщение</button>
</div>
);
}
Особенности:
role="alert" делает сообщение заметным для экранных
ридеров.aria-describedby связывает кнопку с элементом
сообщения, используя уникальный идентификатор.При рендеринге массивов элементов или динамических форм
useId предотвращает коллизии:
import { useId } from 'react-aria';
function CheckboxList({ items }) {
return (
<div>
{items.map((item) => {
const id = useId();
return (
<div key={id}>
<input type="checkbox" id={id} />
<label htmlFor={id}>{item}</label>
</div>
);
})}
</div>
);
}
Рекомендации:
id. Это может
привести к конфликтам при изменении списка.useId создает уникальный идентификатор на каждый
рендер, что особенно важно при добавлении и удалении элементов
динамически.При использовании Next.js или других SSR-фреймворков
useId обеспечивает согласованность идентификаторов между
серверным и клиентским рендером:
id mismatch” или
несоответствия DOM.import { useId } from 'react-aria';
export default function SSRComponent() {
const id = useId();
return <input id={id} type="text" />;
}
<label> →
<input>, <button> →
<aria-describedby> и других ARIA-атрибутов.id в динамических компонентах — useId
надежнее.const id = `field-${useId()}`;
useId является важным инструментом при создании
доступных и масштабируемых React-компонентов. Он упрощает управление
уникальными идентификаторами, обеспечивает корректное поведение при SSR
и минимизирует ошибки при динамическом рендеринге.