Reactning useFormStatus hook'iga oid toʻliq qoʻllanma. Dasturchilarga global foydalanuvchilar uchun jozibador va maʼlumotga boy forma yuborish tajribasini yaratishga imkon beradi.
React useFormStatus: Formani Yuborish Holatini Mukammal Boshqarish
Formalar son-sanoqsiz veb-ilovlarning asosini tashkil etadi va foydalanuvchilarning serverlar bilan oʻzaro aloqasi va maʼlumotlarni taqdim etishning asosiy vositasi boʻlib xizmat qiladi. Formani yuborish jarayonining silliq va maʼlumotga boy boʻlishini taʼminlash ijobiy foydalanuvchi tajribasini yaratish uchun juda muhimdir. React 18 useFormStatus
deb nomlangan kuchli hookni taqdim etdi, u formani yuborish holatini boshqarishni soddalashtirish uchun moʻljallangan. Ushbu qoʻllanma useFormStatus
haqida keng qamrovli maʼlumot beradi, uning xususiyatlari, qoʻllanilish holatlari va global auditoriya uchun qulay va jozibador formalarni yaratish boʻyicha eng yaxshi amaliyotlarni oʻrganadi.
React useFormStatus nima?
useFormStatus
— bu formani yuborish holati haqida maʼlumot beruvchi React Hook'idir. U server amallari (server actions) bilan uzluksiz ishlash uchun moʻljallangan, bu xususiyat server tomonidagi mantiqni toʻgʻridan-toʻgʻri React komponentlaringizdan bajarishga imkon beradi. Hook formaning kutish holati, maʼlumotlari va yuborish paytida yuz bergan har qanday xatolar haqidagi maʼlumotlarni oʻz ichiga olgan obyektni qaytaradi. Bu maʼlumotlar sizga foydalanuvchilarga real vaqt rejimida fikr-mulohaza bildirish imkonini beradi, masalan, yuklanish koʻrsatkichlarini koʻrsatish, forma elementlarini oʻchirib qoʻyish va xato xabarlarini chiqarish.
Server Amallarini Tushunish
useFormStatus
ga chuqurroq kirishdan oldin, server amallarini tushunish muhim. Server amallari — bu serverda ishlaydigan va toʻgʻridan-toʻgʻri React komponentlaridan chaqirilishi mumkin boʻlgan asinxron funksiyalardir. Ular faylning yuqori qismida 'use server'
direktivasi yordamida aniqlanadi. Server amallari odatda quyidagi vazifalar uchun ishlatiladi:
- Forma maʼlumotlarini maʼlumotlar bazasiga yuborish
- Foydalanuvchilarni autentifikatsiya qilish
- Toʻlovlarni qayta ishlash
- Elektron xatlarni yuborish
Quyida server amalining oddiy misoli keltirilgan:
// actions.js
'use server';
export async function submitForm(formData) {
// Server soʻrovini taqlid qilish uchun kechikishni simulyatsiya qilish
await new Promise(resolve => setTimeout(resolve, 2000));
const name = formData.get('name');
const email = formData.get('email');
if (!name || !email) {
return { message: 'Iltimos, barcha maydonlarni toʻldiring.' };
}
// Muvaffaqiyatli yuborishni simulyatsiya qilish
return { message: `${name} uchun forma muvaffaqiyatli yuborildi!` };
}
Bu amal forma maʼlumotlarini kirish sifatida qabul qiladi, kechikishni simulyatsiya qiladi va keyin muvaffaqiyat yoki xato xabarini qaytaradi. 'use server'
direktivasi React'ga ushbu funksiyani serverda bajarilishi kerakligini bildiradi.
useFormStatus qanday ishlaydi
useFormStatus
hooki formani render qiladigan komponent ichida ishlatiladi. U import qilingan Server Action bilan `action` propidan foydalanadigan <form>
elementi ichida ishlatilishi kerak.
Hook quyidagi xususiyatlarga ega obyektni qaytaradi:
pending
: Formaning hozirda yuborilayotganligini koʻrsatuvchi mantiqiy qiymat.data
: Forma bilan yuborilgan maʼlumotlar. Agar forma hali yuborilmagan boʻlsa, bunull
boʻladi.method
: Formani yuborish uchun ishlatilgan HTTP usuli (masalan, "POST", "GET").action
: Forma bilan bogʻliq server amali funksiyasi.error
: Forma yuborish muvaffaqiyatsiz boʻlsa, xato obyekti. Agar yuborish muvaffaqiyatli boʻlsa yoki hali urinilmagan boʻlsa, bunull
boʻladi. Muhim: Xato avtomatik ravishda yuzaga chiqmaydi. Server Action xato obyektini aniq qaytarishi yoki uni yuzaga chiqarishi kerak.
Quyida useFormStatus
ni React komponentida qanday ishlatish boʻyicha misol keltirilgan:
'use client'
import { useFormStatus } from 'react-dom';
import { submitForm } from './actions';
function MyForm() {
const { pending, data, error, action } = useFormStatus();
return (
<form action={submitForm}>
<label htmlFor="name">Ism:</label>
<input type="text" id="name" name="name" disabled={pending} />
<label htmlFor="email">Email:</label>
<input type="email" id="email" name="email" disabled={pending} />
<button type="submit" disabled={pending}>
{pending ? 'Yuborilmoqda...' : 'Yuborish'}
</button>
{error && <p style={{ color: 'red' }}>Xato: {error.message}</p>}
{data && data.message && <p style={{ color: 'green' }}>{data.message}</p>}
</form>
);
}
export default MyForm;
Ushbu misolda:
- Biz
'react-dom'
danuseFormStatus
ni va./actions
dansubmitForm
server amalini import qilamiz. - Formani yuborishning joriy holatini olish uchun
useFormStatus
dan foydalanamiz. - Forma kutish holatida boʻlganda kiritish maydonlari va yuborish tugmasini oʻchirib qoʻyamiz.
- Forma kutish holatida boʻlganda yuklanish xabarini koʻrsatamiz.
- Formani yuborish muvaffaqiyatsiz boʻlsa, xato xabarini koʻrsatamiz.
- Formani yuborish muvaffaqiyatli boʻlsa, muvaffaqiyat xabarini koʻrsatamiz.
useFormStatus'dan foydalanishning afzalliklari
useFormStatus
formani yuborish holatini boshqarish uchun bir nechta afzalliklarni taqdim etadi:
- Soddalashtirilgan Holat Boshqaruvi: Bu yuklanish holatini, xato holatini va forma maʼlumotlarini qoʻlda boshqarish zaruratini yoʻq qiladi.
- Yaxshilangan Foydalanuvchi Tajribasi: Bu foydalanuvchilarga real vaqt rejimida fikr-mulohaza bildirish imkonini beradi, bu esa formani yuborish jarayonini yanada intuitiv va jozibador qiladi.
- Kengaytirilgan Qulaylik: Yuborish paytida forma elementlarini oʻchirib qoʻyish orqali foydalanuvchilarning formani tasodifan bir necha marta yuborishining oldini olasiz.
- Server Amallari bilan Uzluksiz Integratsiya: U server amallari bilan ishlash uchun maxsus moʻljallangan boʻlib, forma yuborishlarini boshqarishning silliq va samarali usulini taʼminlaydi.
- Kamaytirilgan Kod Hajmi: Forma yuborishlarini boshqarish uchun zarur boʻlgan kod miqdorini kamaytiradi.
useFormStatus'dan foydalanish boʻyicha eng yaxshi amaliyotlar
useFormStatus
ning afzalliklarini maksimal darajada oshirish uchun quyidagi eng yaxshi amaliyotlarni koʻrib chiqing:
- Aniq Fikr-mulohaza Taqdim Etish: Bir nechta yuborishlarning oldini olish uchun yuklanish indikatorini koʻrsatish yoki forma elementlarini oʻchirib qoʻyish uchun
pending
holatidan foydalaning. Bu oddiy spinner, progress bar yoki "Yuborilmoqda..." kabi matnli xabar boʻlishi mumkin. Qulaylikni hisobga oling va yuklanish indikatorining ekran oʻquvchilariga toʻgʻri eʼlon qilinishiga ishonch hosil qiling. - Xatoliklarni Toʻgʻri Boshqarish: Foydalanuvchilarga nima notoʻgʻri boʻlganini va uni qanday tuzatishni tushunishga yordam berish uchun maʼlumotga boy xato xabarlarini koʻrsating. Xato xabarlarini foydalanuvchining tili va madaniy kontekstiga moslashtiring. Texnik jargondan saqlaning va aniq, amaliy koʻrsatmalar bering.
- Serverda Maʼlumotlarni Tekshirish: Zararli kiritishlarning oldini olish va maʼlumotlar yaxlitligini taʼminlash uchun har doim forma maʼlumotlarini serverda tekshiring. Server tomonidagi tekshiruv xavfsizlik va maʼlumotlar sifati uchun juda muhimdir. Server tomonidagi tekshiruv xabarlari uchun xalqarolashtirishni (i18n) amalga oshirishni koʻrib chiqing.
- Progressiv Yaxshilashdan Foydalanish: JavaScript oʻchirilgan boʻlsa ham, formangiz ishlashiga ishonch hosil qiling. Bu standart HTML forma elementlaridan foydalanish va formani server tomonidagi endpoint'ga yuborishni oʻz ichiga oladi. Keyin, boyroq foydalanuvchi tajribasini taʼminlash uchun formani JavaScript bilan progressiv ravishda yaxshilang.
- Qulaylikni Hisobga Olish: Formangizni nogironligi boʻlgan foydalanuvchilar uchun qulay qilish uchun ARIA atributlaridan foydalaning. Masalan, xato xabarlarini tegishli forma maydonlari bilan bogʻlash uchun
aria-describedby
dan foydalaning. Formangiz hamma uchun foydalanishga yaroqli boʻlishini taʼminlash uchun Veb Kontentiga Kirish Qoidalariga (WCAG) rioya qiling. - Ishlash Samaradorligini Optimallashtirish:
React.memo
yoki boshqa optimallashtirish usullaridan foydalanib, keraksiz qayta renderlardan saqlaning. Formangizning ishlashini kuzatib boring va har qanday toʻsiqlarni aniqlang. Boshlangʻich yuklanish vaqtini yaxshilash uchun komponentlarni kechiktirib yuklash (lazy-loading) yoki kodni boʻlish (code splitting) dan foydalanishni koʻrib chiqing. - Tezlik Cheklovini Amalga Oshirish: Tezlik cheklovini amalga oshirish orqali serveringizni suiisteʼmollardan himoya qiling. Bu foydalanuvchilarning formani qisqa vaqt ichida juda koʻp marta yuborishining oldini oladi. Chekka nuqtada tezlik cheklovini boshqarish uchun Cloudflare yoki Akamai kabi xizmatlardan foydalanishni koʻrib chiqing.
useFormStatus uchun qoʻllanilish holatlari
useFormStatus
keng koʻlamli stsenariylarda qoʻllanilishi mumkin:
- Aloqa Formalari: Yuborish paytida fikr-mulohaza bildirish va yuzaga kelishi mumkin boʻlgan xatolarni boshqarish.
- Kirish/Roʻyxatdan Oʻtish Formalari: Autentifikatsiya paytida yuklanish holatlarini koʻrsatish va yaroqsiz hisob maʼlumotlari uchun xato xabarlarini chiqarish.
- Elektron Tijorat Toʻlov Formalari: Toʻlovni qayta ishlash paytida yuklanish koʻrsatkichlarini koʻrsatish va yaroqsiz kredit karta maʼlumotlari yoki yetarli mablagʻ boʻlmaganligi bilan bogʻliq xatolarni boshqarish. Bir nechta valyuta va tillarni qoʻllab-quvvatlaydigan toʻlov shlyuzlari bilan integratsiyani koʻrib chiqing.
- Maʼlumotlarni Kiritish Formalari: Tasodifiy maʼlumotlar dublikatsiyasini oldini olish uchun yuborish paytida forma elementlarini oʻchirib qoʻyish.
- Qidiruv Formalari: Qidiruv natijalari olinayotganda yuklanish indikatorini koʻrsatish.
- Sozlamalar Sahifalari: Sozlamalar saqlanayotganda vizual ishoralar berish.
- Soʻrovnomalar va Viktorinalar: Javoblarni yuborishni boshqarish va fikr-mulohaza koʻrsatish.
Xalqarolashtirish (i18n) masalalarini hal qilish
Global auditoriya uchun formalar yaratayotganda, xalqarolashtirish (i18n) juda muhim. useFormStatus
dan foydalanganda i18n masalalarini qanday hal qilish kerakligi haqida:
- Xato Xabarlarini Tarjima Qilish: Xato xabarlarini tarjima faylida saqlang va foydalanuvchining til sozlamasiga (locale) qarab tegishli xabarni koʻrsatish uchun
react-intl
yokii18next
kabi kutubxonadan foydalaning. Xato xabarlarining aniq, qisqa va madaniy jihatdan mos ekanligiga ishonch hosil qiling. - Raqamlar va Sanalarni Formatlash: Raqamlar va sanalarni foydalanuvchining til sozlamasiga muvofiq formatlash uchun
Intl
API'sidan foydalaning. Bu raqamlar va sanalarning ularning mintaqasi uchun toʻgʻri formatda koʻrsatilishini taʼminlaydi. - Turli Sana va Vaqt Formatlarini Qoʻllab-quvvatlash: Turli sana va vaqt formatlarini qoʻllab-quvvatlaydigan kiritish maydonlarini taqdim eting. Mahalliylashtirilgan sana tanlagichni taqdim etish uchun
react-datepicker
kabi kutubxonadan foydalaning. - Oʻngdan Chapga (RTL) Tillarni Qoʻllab-quvvatlash: Formangizning joylashuvi Arab va Ibroniy kabi RTL tillari uchun toʻgʻri ishlashiga ishonch hosil qiling. Joylashuvni sozlash uchun CSS mantiqiy xususiyatlaridan foydalaning.
- Mahalliylashtirish Kutubxonasidan Foydalanish: Tarjimalarni boshqarish va tilga xos formatlashni amalga oshirish uchun mustahkam i18n kutubxonasidan foydalaning.
i18next bilan misol:
// i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import en from './locales/en.json';
import fr from './locales/fr.json';
i18n
.use(initReactI18next)
.init({
resources: {
en: { translation: en },
fr: { translation: fr },
},
lng: 'en',
fallbackLng: 'en',
interpolation: {
escapeValue: false, // react allaqachon xss'dan himoya qiladi
},
});
export default i18n;
// MyForm.js
import { useTranslation } from 'react-i18next';
function MyForm() {
const { t } = useTranslation();
const { pending, data, error, action } = useFormStatus();
return (
<form action={submitForm}>
<label htmlFor="name">{t('name')}:</label>
<input type="text" id="name" name="name" disabled={pending} />
<label htmlFor="email">{t('email')}:</label>
<input type="email" id="email" name="email" disabled={pending} />
<button type="submit" disabled={pending}>
{pending ? t('submitting') : t('submit')}
</button>
{error && <p style={{ color: 'red' }}>{t('error')}: {t(error.message)}</p>}
{data && data.message && <p style={{ color: 'green' }}>{t(data.message)}</p>}
</form>
);
}
export default MyForm;
Qulaylik Masalalari
Formalarni yaratishda qulaylikni taʼminlash juda muhimdir. useFormStatus
dan foydalanganda formalaringizni qanday qilib yanada qulayroq qilish mumkinligi haqida:
- ARIA Atributlaridan Foydalanish: Yordamchi texnologiyalarga semantik maʼlumot berish uchun
aria-invalid
,aria-describedby
vaaria-live
kabi ARIA atributlaridan foydalaning. Masalan, tekshiruv xatolari boʻlgan kiritish maydonlaridaaria-invalid="true"
dan foydalaning va xato xabarlarini tegishli maydonlar bilan bogʻlash uchunaria-describedby
dan foydalaning. Yuklanish koʻrsatkichlari va xato xabarlari kabi dinamik tarkibni koʻrsatadigan elementlardaaria-live="polite"
yokiaria-live="assertive"
dan foydalaning. - Klaviatura Navigatsiyasini Taqdim Etish: Foydalanuvchilar formani klaviatura yordamida kezishi mumkinligiga ishonch hosil qiling. Elementlarning fokus olish tartibini boshqarish uchun
tabindex
atributidan foydalaning. - Semantik HTML'dan Foydalanish: Formangizga tuzilma va maʼno berish uchun
<label>
,<input>
,<button>
va<fieldset>
kabi semantik HTML elementlaridan foydalaning. - Aniq Yorliqlarni Taqdim Etish: Barcha forma maydonlari uchun aniq va tushunarli yorliqlardan foydalaning. Yorliqlarni tegishli kiritish maydonlari bilan
for
atributi yordamida bogʻlang. - Yetarli Kontrastdan Foydalanish: Matn va fon ranglari oʻrtasida yetarli kontrast mavjudligiga ishonch hosil qiling. Ranglaringiz qulaylik qoidalariga mos kelishini tekshirish uchun rang kontrasti tekshirgichidan foydalaning.
- Yordamchi Texnologiyalar bilan Sinovdan Oʻtkazish: Formangizni nogironligi boʻlgan odamlar uchun foydalanishga yaroqli ekanligiga ishonch hosil qilish uchun ekran oʻquvchilari kabi yordamchi texnologiyalar bilan sinab koʻring.
ARIA atributlari bilan misol:
function MyForm() {
const { pending, data, error, action } = useFormStatus();
return (
<form action={submitForm}>
<label htmlFor="name">Ism:</label>
<input
type="text"
id="name"
name="name"
disabled={pending}
aria-invalid={!!error} // Xato borligini ko'rsatish
aria-describedby={error ? 'name-error' : null} // Xato xabarini bog'lash
/>
{error && (
<p id="name-error" style={{ color: 'red' }} aria-live="polite">{error.message}</p>
)}
<label htmlFor="email">Email:</label>
<input type="email" id="email" name="email" disabled={pending} />
<button type="submit" disabled={pending}>
{pending ? 'Yuborilmoqda...' : 'Yuborish'}
</button>
{data && data.message && <p style={{ color: 'green' }}>{data.message}</p>}
</form>
);
}
Asosiy Foydalanishdan Tashqari: Ilgʻor Texnikalar
useFormStatus
ning asosiy ishlatilishi oddiy boʻlsa-da, formani yuborish tajribangizni yanada yaxshilashi mumkin boʻlgan bir nechta ilgʻor texnikalar mavjud:
- Maxsus Yuklanish Koʻrsatkichlari: Oddiy spinner oʻrniga, vizual jihatdan jozibadorroq va maʼlumotga boy yuklanish koʻrsatkichidan foydalaning. Bu progress bar, maxsus animatsiya yoki fonda nima boʻlayotgani haqida kontekst beruvchi xabar boʻlishi mumkin. Maxsus yuklanish koʻrsatkichlaringiz qulay va yetarli kontrastga ega ekanligiga ishonch hosil qiling.
- Optimistik Yangilanishlar: Server javob berishidan oldin UI'ni optimistik tarzda yangilab, foydalanuvchiga darhol fikr-mulohaza bering. Bu formani yanada sezgir his qildirish va seziladigan kechikishni kamaytirishi mumkin. Biroq, yuzaga kelishi mumkin boʻlgan xatolarni boshqarishga va server soʻrovi muvaffaqiyatsiz boʻlsa, UI'ni asl holiga qaytarishga ishonch hosil qiling.
- Debouncing va Throttling: Foydalanuvchi yozayotganda yuboriladigan server soʻrovlari sonini cheklash uchun debouncing yoki throttling'dan foydalaning. Bu ishlash samaradorligini oshirishi va serverning haddan tashqari yuklanishining oldini olishi mumkin.
lodash
kabi kutubxonalar funksiyalarni debouncing va throttling qilish uchun yordamchi dasturlarni taqdim etadi. - Shartli Rendering: Forma elementlarini
pending
holatiga qarab shartli ravishda render qiling. Bu formani yuborish paytida maʼlum elementlarni yashirish yoki oʻchirib qoʻyish uchun foydali boʻlishi mumkin. Masalan, foydalanuvchi tasodifan formani qayta oʻrnatishining oldini olish uchun forma kutish holatida boʻlganda "Qayta oʻrnatish" tugmasini yashirishni xohlashingiz mumkin. - Formani Tekshirish Kutubxonalari bilan Integratsiya: Keng qamrovli forma boshqaruvi uchun
useFormStatus
niFormik
yokiReact Hook Form
kabi formani tekshirish kutubxonalari bilan integratsiya qiling.
Umumiy Muammolarni Bartaraf Etish
useFormStatus
dan foydalanishda siz baʼzi umumiy muammolarga duch kelishingiz mumkin. Ularni qanday bartaraf etish mumkin:
pending
holati yangilanmayapti: Formaning server amali bilan toʻgʻri bogʻlanganligiga va server amalining toʻgʻri aniqlanganligiga ishonch hosil qiling.<form>
elementida `action` atributi toʻgʻri oʻrnatilganligini tekshiring.error
holati toʻldirilmayapti: Xato yuz berganda server amali xato obyektini qaytarayotganiga ishonch hosil qiling. Server Action xatoni aniq qaytarishi yoki uni yuzaga chiqarishi kerak.- Forma bir necha marta yuborilmoqda: Bir nechta yuborishlarning oldini olish uchun forma kutish holatida boʻlganda yuborish tugmasini yoki kiritish maydonlarini oʻchirib qoʻying.
- Forma maʼlumotlarni yubormayapti: Forma elementlarida
name
atributi toʻgʻri oʻrnatilganligini tekshiring. Server amali forma maʼlumotlarini toʻgʻri tahlil qilayotganiga ishonch hosil qiling. - Ishlash samaradorligi muammolari: Keraksiz qayta renderlardan qochish va qayta ishlanayotgan maʼlumotlar hajmini kamaytirish uchun kodingizni optimallashtiring.
useFormStatus'ga Alternativalar
useFormStatus
kuchli vosita boʻlsa-da, ayniqsa eski React versiyalarida yoki murakkab forma mantiqi bilan ishlaganda formani yuborish holatini boshqarish uchun muqobil yondashuvlar mavjud:
- Qoʻlda Holat Boshqaruvi: Yuklanish holatini, xato holatini va forma maʼlumotlarini qoʻlda boshqarish uchun
useState
vauseEffect
dan foydalanish. Bu yondashuv sizga koʻproq nazorat beradi, lekin koʻproq shablon kod talab qiladi. - Forma Kutubxonalari: Formik, React Hook Form yoki Final Form kabi forma kutubxonalaridan foydalanish. Bu kutubxonalar tekshirish, yuborishni boshqarish va holatni boshqarish kabi keng qamrovli forma boshqaruvi xususiyatlarini taqdim etadi. Bu kutubxonalar koʻpincha yuborish holatini boshqarish uchun oʻzlarining hooklari yoki komponentlarini taqdim etadi.
- Redux yoki Context API: Forma holatini global miqyosda boshqarish uchun Redux yoki Context API'dan foydalanish. Bu yondashuv bir nechta komponentlarda ishlatiladigan murakkab formalar uchun mos keladi.
Yondashuvni tanlash formangizning murakkabligiga va sizning maxsus talablaringizga bogʻliq. Oddiy formalar uchun useFormStatus
koʻpincha eng oddiy va samarali yechimdir. Murakkabroq formalar uchun forma kutubxonasi yoki global holat boshqaruvi yechimi yanada mos kelishi mumkin.
Xulosa
useFormStatus
React ekotizimiga qimmatli qoʻshimcha boʻlib, formani yuborish holatini boshqarishni soddalashtiradi va dasturchilarga yanada jozibador va maʼlumotga boy foydalanuvchi tajribasini yaratish imkonini beradi. Uning xususiyatlari, eng yaxshi amaliyotlari va qoʻllanilish holatlarini tushunib, siz global auditoriya uchun qulay, xalqarolashtirilgan va samarali formalarni yaratish uchun useFormStatus
dan foydalanishingiz mumkin. useFormStatus
ni oʻzlashtirish dasturlashni soddalashtiradi, foydalanuvchi oʻzaro aloqasini yaxshilaydi va natijada yanada mustahkam va foydalanuvchiga qulay veb-ilovlar yaratishga hissa qoʻshadi.
Global auditoriya uchun formalar yaratayotganda qulaylik, xalqarolashtirish va ishlash samaradorligiga ustuvorlik berishni unutmang. Ushbu qoʻllanmada keltirilgan eng yaxshi amaliyotlarga rioya qilish orqali siz joylashuvi yoki qobiliyatidan qatʼi nazar, hamma uchun foydalanishga yaroqli formalarni yaratishingiz mumkin. Bu yondashuv barcha foydalanuvchilar uchun yanada inklyuziv va qulay veb yaratishga hissa qoʻshadi.