useId — unique ID yaratish, accessibility uchun
Muammo: bir xil ID bir sahifada ikki marta
HTML da <label> va <input> ni bog'lash uchun htmlFor va id ishlatiladi. Foydalanuvchi labelga bossа — input ga focus tushadi. Bu accessibility uchun muhim.
function EmailInput() {
return (
<div>
<label htmlFor="email">Email</label>
<input id="email" type="email" />
</div>
);
}
Lekin bu komponent sahifada ikki marta ishlatilsa — ikki xil element bir xil id="email" ga ega bo'ladi. HTML da ID unikal bo'lishi kerak. Bu xato.
// ❌ Muammo — ikki xil input, bir xil id
<EmailInput /> // id="email"
<EmailInput /> // id="email" — takrorlandi!
Birinchi labelga bossangiz — qaysi inputga focus tushishini bilmaysiz.
useId yechimi
useId — har safar chaqirilganda unikal ID qaytaradi. Bir komponent sahifada necha marta ishlatilmasin — har biri o'z unikal ID sini oladi.
import { useId } from 'react';
function EmailInput() {
const id = useId(); // ":r0:", ":r1:", ":r2:" — har safar boshqacha
return (
<div>
<label htmlFor={id}>Email</label>
<input id={id} type="email" />
</div>
);
}
// ✅ Endi har biri o'z unikal ID siga ega
<EmailInput /> // id=":r0:"
<EmailInput /> // id=":r1:"
<EmailInput /> // id=":r2:"
Bir komponentda bir nechta ID
Bir komponentda bir nechta element bog'lash kerak bo'lsa — bitta useId dan prefix sifatida foydalaniladi:
function Forma() {
const id = useId();
return (
<form>
<div>
<label htmlFor={`${id}-ism`}>Ism</label>
<input id={`${id}-ism`} type="text" />
</div>
<div>
<label htmlFor={`${id}-email`}>Email</label>
<input id={`${id}-email`} type="email" />
</div>
<div>
<label htmlFor={`${id}-parol`}>Parol</label>
<input id={`${id}-parol`} type="password" />
</div>
</form>
);
}
Bitta useId — uchta unikal ID. Har safar useId chaqirish o'rniga — bitta ID dan prefix yasash yaxshiroq.
Qachon kerak emas?
useId faqat HTML elementlarni bog'lash uchun. Ro'yxat uchun key sifatida ishlatmang:
// ❌ Xato — useId ro'yxat uchun emas
{items.map(item => {
const id = useId(); // Hook loop ichida ishlatilmaydi!
return <li key={id}>{item}</li>;
})}
// ✅ Ro'yxat uchun — ma'lumotdagi id
{items.map(item => <li key={item.id}>{item.nomi}</li>)}
⚠️ Hook lar loop, shart yoki ichki funksiya ichida chaqirilmaydi — bu React ning asosiy qoidasi.
Xulosa
useId — accessibility uchun unikal ID yaratadi. label va input ni bog'lashda, aria-* atributlarida ishlatiladi.
const id = useId();
// ":r0:", ":r1:" — har komponent uchun unikal
<label htmlFor={id}>...</label>
<input id={id} />
Kichik hook, lekin accessibility uchun muhim.
Keyingi dars
24-dars: Custom Hook — nima, qanday yoziladi, qoidalar