useId
es un hook para generar identificadores únicos que se pueden pasar a los atributos de las etiquetas HTML y es especialmente útil para accesibilidad.
Llama useId
en el nivel superior del componente para generar una ID única:
import { useId } from 'react'
function PasswordField() {
const passwordHintId = useId()
// ...
A continuación, pasa el ID generado a diferentes atributos:
<>
<input type="password" aria-describedby={passwordHintId} />
<p id={passwordHintId}>
</>
La etiqueta aria-describedby
te permite especificar que dos etiquetas están relacionadas entre sí, puede generar una identificación única con useId donde incluso si PasswordField
aparece varias veces en la pantalla, las identificaciones generadas no chocarán.
El ejemplo completo sería así:
import { useId } from 'react'
function PasswordField() {
const passwordHintId = useId()
return (
<>
<label>
Password:
<input
type="password"
aria-describedby={passwordHintId}
/>
</label>
<p id={passwordHintId}>
El password debe ser de 18 letras y contener caracteres especiales
</p>
</>
)
}
export default function App() {
return (
<>
<h2>Choose password</h2>
<PasswordField />
<h2>Confirm password</h2>
<PasswordField />
</>
)
}
Como ves en App
estamos usando el componente dos veces. Si pusieramos una id a mano, por ejemplo password
, entonces la ID no sería única y quedaría duplicada. Por eso es importante que generes la ID automáticamente con useId
.