useState asoslari, object/array state, functional update, render va snapshot mental modeli — chuqur test va mashqlar bilan.
Props — tashqi ma'lumot. State — komponentning o'z ichki, vaqt o'tishi bilan o'zgaradigan xotirasi. Bu — butun handbookdagi eng muhim boblardan biri.
State — React tomonidan kuzatiladigan, o'zgarganda komponentni qayta render qildiruvchi ma'lumot.
App.jsxReact JSXfunction Counter() {let count = 0;function increment() {count++; // qiymat o'zgaradi, lekin UI yangilanmaydi}return <button onClick={increment}>{count}</button>;}
App.jsxReact JSXfunction Counter() {const [count, setCount] = useState(0);return (<button onClick={() => setCount(count + 1)}>{count}</button>);}
React count o'zgarganidan xabardor bo'lishi kerak, aks holda komponentni qayta chaqirmaydi (re-render qilmaydi). setCount — React'ga aynan shu signalni beradi.
App.jsxReact JSXconst [user, setUser] = useState({ name: "Abbos", age: 26 });function updateName(name) {setUser({ ...user, name }); // eski qiymatlarni saqlab, faqat name'ni yangilaymiz}const [cart, setCart] = useState([]);function addToCart(product) {setCart((currentCart) => [...currentCart, product]);}
💡 Key Idea
setCart((currentCart) => ...) — functional update. Bu, ayniqsa bir nechta yangilanish ketma-ket bo'lganda, eng so'nggi state'ga asoslanishni kafolatlaydi.
code.textTEXTUser Action↓setState() chaqiriladi↓React yangi state'ni "rejalashtiradi" (schedules)↓Komponent funksiyasi qaytadan chaqiriladi (re-render)↓Yangi JSX (UI tasviri) hosil bo'ladi↓React uni eskisi bilan solishtiradi va DOM'ni yangilaydi
Har bir render — bu "snapshot": o'sha render ichidagi count qiymati o'zgarmas (const kabi qotib qoladi), keyingi render esa yangi count qiymati bilan yangi funksiya chaqiruvi bo'ladi.
Task: Increment/decrement/reset tugmalari bo'lgan Counter komponent yarating.
Task: To'liq Todo List komponenti — qo'shish, o'chirish, bajarilgan deb belgilash.
Task: Shopping Cart — mahsulot qo'shish, o'chirish va umumiy narxni hisoblash (barchasi state orqali).
App.jsxReact JSXconst [count, setCount] = useState(0);function handleClick() {setCount(count + 1);setCount(count + 1);}
🧠 Think first! Button bir marta bosilganda count nechaga o'zgaradi — 1 ga yoki 2 ga?
Why?
Ikkala chaqiruv ham o'sha renderdagi "qotib qolgan" count qiymatidan (masalan 0) foydalanadi, ya'ni ikkalasi ham setCount(1) chaqirgan bilan barobar. To'g'ri natija uchun functional update kerak: setCount(c => c + 1) ikki marta.
App.jsxReact JSXconst [todos, setTodos] = useState([]);function addTodo(text) {todos.push({ id: Date.now(), text });setTodos(todos);}
Your Task: Bu kod nega UI'ni yangilamaydi?
<details> <summary>Solution</summary> `push()` massivni mutate qiladi — reference o'zgarmagani uchun React "yangi state" deb tanimasligi mumkin.Yechim:
</details>App.jsxReact JSXfunction addTodo(text) {setTodos([...todos, { id: Date.now(), text }]);}
State — komponentning React tomonidan kuzatiladigan xotirasi. U o'zgarganda, React komponentni qayta render qiladi va UI'ni yangilaydi. State har doim immutable tarzda yangilanadi.
useState — re-render'ni ishga tushiradisetState(prev => ...)) ishlatiladiApp.jsxReact JSXconst [value, setValue] = useState(initial);setValue(newValue); // oddiy updatesetValue(prev => prev + 1); // functional updatesetObj({ ...obj, key: newValue }); // object updatesetArr([...arr, newItem]); // array qo'shishsetArr(arr.filter(x => x.id !== id)); // array o'chirish
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 / 3 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: