React-da Eng Ko'p Qilinadigan 7 Xato va Ularning Yechimi
Muallif: Javohir Abdullayev · · React va Frontend

React Dasturchilarining Eng Katta Xatolari
React kutubxonasi o'rganish uchun sodda tuyulsa-da, komponentlarning ishlash mexanizmi, holat (state) boshqaruvi va render siklini chuqur tushunmaslik loyihada kutilmagan xatoliklarga olib keladi. Ko'plab dasturchilar bir xil muammolarga qayta-qayta duch kelishadi. Ushbu maqolada React ishlab chiqish jarayonida eng ko'p uchraydigan 7 ta xatoni va ularni to'g'ri bartaraf etish usullarini ko'rib chiqamiz.
1. State-ni To'g'ridan-To'g'ri O'zgartirish (State Mutation)
React-da state o'zgarmas (immutable) bo'lishi kerak. Dasturchilar obyekt yoki massivlarni to'g'ridan-to'g'ri o'zgartirishga uringanlarida, React komponentni qayta render qilishi kerakligini sezmay qolishi mumkin.
Xato usul:
const [user, setUser] = useState({ name: 'Ali', age: 20 });
const updateAge = () => {
user.age = 21; // Xato: Asl obyekt to'g'ridan-to'g'ri o'zgartirildi
setUser(user);
};To'g'ri yechim: Har doim yangi nusxa (shallow copy) yarating yoki spread operatoridan foydalaning:
const updateAge = () => {
setUser(prevUser => ({ ...prevUser, age: 21 }));
};2. useEffect Ichida Bog'liqliklar Ro'yxatini (Dependency Array) Noto'g'ri Ko'rsatish
useEffect hook'ining ikkinchi parametri — bog'liqliklar massivi ko'pincha muammolar manbai bo'ladi. Agar massiv bo'sh qoldirilsa yoki unga kerakli o'zgaruvchilar qo'shilmasa, komponent eskirgan (stale) qiymatlar bilan ishlaydi. Aksincha, har safar yangilanadigan funksiya yoki obyekt qo'shilsa, cheksiz render sikli (infinite loop) yuzaga keladi.
Yechim: Hook ichida ishlatilgan har qanday props yoki state o'zgaruvchisini dependency ro'yxatiga kiriting. Funksiyalarni esa useCallback orqali o'rab oling yoki to'g'ridan-to'g'ri hook ichida e'lon qiling.
3. Ro'yxat Render Qilishda Index-dan Key Sifatida Foydalanish
Massiv elementlarini map() yordamida ekranga chiqarishda har bir element uchun unikal key berish shart. Massiv indeksidan key sifatida foydalanish ro'yxat tartibi o'zgarganda yoki element o'chirilganda jiddiy UI xatolariga sabab bo'ladi.
// Xato: items.map((item, index) => <TodoItem key={index} {...item} />)
// To'g'ri: items.map((item) => <TodoItem key={item.id} {...item} />)Har doim bazadan kelgan unikal identifikator (id) yoki uuid ishlating.
4. Asinxron State Yangilanishini Noto'g'ri Kutish
useState orqali state yangilanganda, bu jarayon asinxron tarzda bajariladi. Yangilash funksiyasini chaqirgandan so'ng darhol yangi qiymatni o'qishga urinish eskirgan natijani qaytaradi.
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
console.log(count); // Bu yerda hali eski count qiymati turadi!
};Agar yangi holat avvalgisiga bog'liq bo'lsa, har doim callback funksiyadan foydalaning: setCount(prev => prev + 1).
5. useEffect Ichida Tozalash (Cleanup) Funksiyasini Unutish
Timerlar (setInterval), WebSocket ulanishlar yoki brauzer hodisalari (addEventListener) bilan ishlaganda, komponent o'chirilganda (unmount) tozalash funksiyasini qaytarish shart. Aks holda, xotirada ortiqcha yuklama (memory leak) paydo bo'ladi.
useEffect(() => {
const handleResize = () => console.log(window.innerWidth);
window.addEventListener('resize', handleResize);
// Tozalash funksiyasi
return () => {
window.removeEventListener('resize', handleResize);
};
}, []);6. Keraksiz Ortiqcha State Yaratish
Boshqa state yoki props orqali osongina hisoblab chiqariladigan qiymatlar uchun alohida state yaratish kodni murakkablashtiradi va sinxronizatsiya xatolariga olib keladi.
Xato: firstName, lastName va ularni birlashtiruvchi alohida fullName state yaratish.
To'g'ri yechim: const fullName = `${firstName} ${lastName}`; shaklida to'g'ridan-to'g'ri hisoblang. Og'ir hisob-kitoblar bo'lsa, useMemo hook'idan foydalaning.
7. Props Drilling Muammosiga E'tibor Bermaslik
Ma'lumotni komponentlar daraxti bo'ylab 4-5 pog'ona pastga uzatish (props drilling) kodni o'qish va kengaytirishni qiyinlashtiradi. Bunday holatlarda React Context API yoki Zustand kabi yengil state boshqaruv vositalaridan foydalanish tavsiya etiladi.
Xulosa
React bilan ishlashda toza va xatosiz kod yozish komponentlar hayot siklini va state boshqaruvini to'g'ri anglashdan boshlanadi. Yuqorida keltirilgan xatolardan qochish orqali ilovangiz tezligini oshirishingiz va kelajakdagi xatoliklarning oldini olishingiz mumkin.
Teglar: #React #Frontend #JavaScript #Veb dasturlash