Error Boundaries, componentDidCatch, va asinxron xatolarni try/catch orqali boshqarish — test va debugging mashqlari bilan.
Yaxshi ilova — xatolarni "yashirmaydi", balki ularni chiroyli va foydali tarzda boshqaradi.
App.jsxReact JSXclass ErrorBoundary extends React.Component {state = { hasError: false };static getDerivedStateFromError() {return { hasError: true };}componentDidCatch(error, info) {console.error("Xatolik:", error, info);}render() {if (this.state.hasError) {return <h2>Nimadir xato ketdi.</h2>;}return this.props.children;}}<ErrorBoundary><ProductList /></ErrorBoundary>
Agar bitta komponentda kutilmagan JavaScript xatosi yuz bersa, butun ilova "oq ekran" bo'lib qolishi mumkin. Error Boundary — shu xatoni "ushlab", faqat o'sha qismni fallback UI bilan almashtiradi.
💡 Key Idea
Error Boundary hozircha faqat class komponent sifatida yozilishi mumkin — funksional komponent uchun bevosita ekvivalenti yo'q, lekin uni bir marta yozib, butun ilovada qayta ishlatish mumkin.
App.jsxReact JSXasync function loadUser(id) {try {const res = await fetch(`/api/users/${id}`);if (!res.ok) throw new Error("Foydalanuvchi topilmadi");return await res.json();} catch (error) {console.error(error);throw error;}}
⚠️ Common Mistake
Error Boundary — async kod (masalan fetch yoki setTimeout ichidagi) xatolarni ushlamaydi. Bunday holatlarda try/catch yoki state orqali qo'lda boshqarish kerak.
Task: Butun ilovani o'rab turuvchi umumiy ErrorBoundary yarating va uni bir nechta sahifada qayta ishlating.
App.jsxReact JSXfunction ProductPage() {useEffect(() => {fetch("/api/product").then(res => {if (!res.ok) throw new Error("Xato");});}, []);return <ErrorBoundary><Content /></ErrorBoundary>;}
Your Task: fetch ichida throw qilingan xato ErrorBoundary tomonidan ushlanadimi?
Error Boundary — render va lifecycle xatolarini ushlab, fallback UI ko'rsatadi, lekin asinxron xatolarni ushlamaydi. Asinxron xatolar try/catch yoki .catch() orqali alohida boshqariladi.
App.jsxReact JSXclass ErrorBoundary extends React.Component {state = { hasError: false };static getDerivedStateFromError() { return { hasError: true }; }componentDidCatch(error, info) { console.error(error, info); }render() {if (this.state.hasError) return <Fallback />;return this.props.children;}}
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 1 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: