State management — dastur holatini saqlash, o‘zgartirish va uning turli qismlariga izchil yetkazish usullari majmui. Holat foydalanuvchi kiritgan qiymat, tanlangan sahifa, autentifikatsiya sessiyasi, serverdan olingan ma’lumot yoki jarayon bosqichi bo‘lishi mumkin. To‘g‘ri boshqaruv bir xil hodisadan keyin tizimning kutiladigan holatga kelishini va interfeys shu holatni aks ettirishini ta’minlaydi.
Holat turlari
Local component state faqat bitta interfeys qismiga tegishli, masalan modal ochiqligi. Shared client state bir nechta komponent ishlatadigan tema yoki savatdir. Server state masofadagi manbaning clientdagi nusxasi bo‘lib, unda cache, stale vaqt, qayta yuklash va konflikt muammolari mavjud. URL state filter, qidiruv va paginationni havola bilan ulashish imkonini beradi.
Har bir qiymatni global store’ga joylash bog‘liqlik va keraksiz renderlarni ko‘paytiradi. Holat uni ishlatadigan eng yaqin umumiy egada saqlanadi. Hisoblab chiqarish mumkin bo‘lgan qiymat alohida state sifatida takrorlanmaydi; aks holda asosiy va hosila qiymat bir-biridan ajralib qolishi mumkin.
Yangilanish modeli
Mutable model obyektni joyida o‘zgartiradi. Immutable model yangi qiymat yaratib, eski holatni saqlab qoladi. Immutable update change detection, undo va time-travel debuggingni osonlashtiradi, lekin katta tuzilmada nusxalash xarajatini structural sharing kamaytiradi. Framework reactivity tizimi qaysi o‘zgarishni kuzatishini tushunish muhim.
Event va action holat qanday o‘zgarganini ifodalaydi. Reducer oldingi state va action’dan yangi state hisoblaydi. State machine ruxsat etilgan holatlar va transitionlarni aniq belgilaydi; to‘lov, autentifikatsiya yoki ko‘p bosqichli forma kabi jarayonda mumkin bo‘lmagan kombinatsiyalarni kamaytiradi.
Asinxron ma’lumot
API chaqiruvida faqat data emas, loading, error, retry va request identity ham holatdir. Eski so‘rov keyinroq tugab, yangi natijani bosib ketmasligi uchun cancellation yoki request version qo‘llanadi. Optimistic update foydalanuvchi amalini darhol ko‘rsatadi, server rad etsa rollback qiladi. Mutation muvaffaqiyatidan keyin bog‘liq cache yangilanadi yoki invalidatsiya qilinadi.
Bir nechta client bir yozuvni tahrirlasa version, ETag yoki timestamp yordamida konflikt aniqlanadi. “Oxirgi yozuv yutadi” oddiy, lekin boshqa foydalanuvchi o‘zgarishini jim yo‘qotishi mumkin. Muhim ma’lumotda merge yoki foydalanuvchiga konfliktni ko‘rsatish afzal.
Saqlash va tiklash
Memory state tab yopilganda yo‘qoladi. sessionStorage tab sessiyasi, localStorage esa uzoqroq muddat uchun ishlatiladi. Ular synchronous va XSS orqali o‘qilishi mumkin, shu sabab katta ma’lumot yoki yuqori qiymatli token uchun mos emas. IndexedDB katta structured data va offline cache uchun mo‘ljallangan.
Persisted state sxemasi ilova versiyasi bilan o‘zgaradi. Migration bo‘lmasa eski qiymat yangi kodni buzishi mumkin. Maxfiy maydonlar clientga keragidan ortiq yuborilmaydi, diskda saqlash muddati belgilanadi. Logout vaqtida tegishli cache va real-time subscription tozalanadi.
Kuzatuv va sinov
State transition logi xatoni takrorlashga yordam beradi, ammo parol va shaxsiy ma’lumotni yozmasligi kerak. Selector va reducer pure funksiya bo‘lsa unit test sodda bo‘ladi. Integration test asinxron ketma-ketlik, refresh va back navigationni qamrab oladi. Dastur holati bir nechta yashirin singleton va browser storage orasida tarqalsa, xatti-harakatni tushunish qiyinlashadi.
Bir nechta oynadagi holat
Bitta foydalanuvchi ilovani bir nechta tabda ochishi mumkin. Logout, tema yoki yangilangan yozuv boshqa tabga BroadcastChannel, storage hodisasi yoki serverdagi real-time kanal orqali yetkaziladi. Har tab o‘zgarishni yana qayta tarqatib cheksiz sikl yaratmasligi uchun event ID va manba belgisi ishlatiladi. Bir tabdagi unsaved draft boshqa tab tomonidan jim bosib ketmasligi kerak.
Bog‘liq tushunchalar
Application state, State machine, Reducer, Immutability, Cache invalidation, Reactive programming, Single-Page Application