Loading/error/success holatlari, server state vs client state, caching tushunchasi va real-world data fetching patternlar — test va mashqlar bilan.
PART 12'da useEffect orqali fetch qilishni ko'rgan edik. Endi loading/error/success holatlari, caching va server state vs client state farqini chuqurroq ko'ramiz.
App.jsxReact JSXfunction useFetch(url) {const [state, setState] = useState({ data: null, loading: true, error: null });useEffect(() => {let cancelled = false;setState({ data: null, loading: true, error: null });fetch(url).then((res) => res.json()).then((data) => { if (!cancelled) setState({ data, loading: false, error: null }); }).catch((error) => { if (!cancelled) setState({ data: null, loading: false, error }); });return () => { cancelled = true; };}, [url]);return state;}
Server state — tashqi manbadan kelgan, eskirishi mumkin bo'lgan ma'lumot (masalan mahsulotlar ro'yxati). Client state — ilovaning o'z ichki holati (masalan forma qiymati).
Bir xil so'rov qayta-qayta yuborilmasligi uchun, natija vaqtincha "keshda" saqlanadi.
💡 Key Idea
Maxsus kutubxonalar (React Query, SWR) — caching, qayta urinish (retry), background refetch kabi murakkab mantiqni avtomatik hal qiladi, buni qo'lda useEffect bilan qayta yozish o'rniga.
Task: Qidiruv natijalarini sahifalash (pagination) bilan yuklovchi komponent yozing — loading va error holatlarini hisobga oling.
App.jsxReact JSXfunction ProductList() {const [products, setProducts] = useState([]);const [loading, setLoading] = useState(false);useEffect(() => {fetch("/api/products").then(res => res.json()).then(setProducts);}, []);return loading ? <Spinner /> : <List items={products} />;}
Your Task: loading hech qachon true bo'lmaydi, Spinner hech qachon ko'rinmaydi. Nega?
Ma'lumot yuklashda loading, error, success holatlarini to'g'ri boshqarish muhim. Server state — client state'dan farqli, eskirishi mumkin bo'lgan tashqi ma'lumot. Caching — takroriy so'rovlarni kamaytiradi.
App.jsxReact JSXconst [state, setState] = useState({ data: null, loading: true, error: null });useEffect(() => {let cancelled = false;setState({ data: null, loading: true, error: null });fetch(url).then(r => r.json()).then(data => !cancelled && setState({ data, loading: false, error: null })).catch(error => !cancelled && setState({ data: null, loading: false, error }));return () => { cancelled = true; };}, [url]);
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: