State management in Frontend
Frontend dasturlashda state management — bu dasturni boshqarish jarayoni. Bu jarayon foydalanuvchining interfeys bilan o‘zaro aloqasini sinxronlashtirishda muhim rol o‘ynaydi. Birinchi state nima ekanini va uni boshqarish usullarini ko'rib chiqamiz.
State nima?
Frontendda state — bu dasturdagi ma'lumotlarning o'zgaruvchan holati. Masalan:
- Foydalanuvchining login holati (kirgan yoki chiqib ketgan).
- Korzinkadagi mahsulotlar ro'yxati.
- Formadagi foydalanuvchi tomonidan kiritilgan ma'lumotlar.
State-ni boshqarish to'g'ri ishlatilinmasa, dastur ishlashida muammolar yuzaga kelishi mumkin, masalan:
State Management turlari
State boshqarishni ikki asosiy turga ajratish mumkin:
1. Local State
Bu komponent ichida saqlanadigan va boshqariladigan state. Odatda kichik loyihalar uchun yetarli bo‘ladi. Misol uchun, React’da useState va useReducer yordamida local state boshqariladi.
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>Click</button>
</div>
);
}
2. Global State
Bu bir nechta komponentlar orasida ma'lumot almashinadigan state. Katta loyihalarda global state boshqarish uchun maxsus kutubxonalardan foydalaniladi.
Global state boshqarish uchun mashhur kutubxonalar:
Shaxsiy tajriba
Frontend dasturchi sifatida 3 yilga yaqin tajribamdan kelib chiqib, shu paytgacha State management uchun Redux va React query foydalanganman. Ko'pgina loyihalarni o'zim boshlaganimda React querydan foydalanaman.
Redux, Redux toolkit bulardan foydalanmaysizmi degan savol bo'lishi mumkin?
Bulardan foydalanish loyihani qurayotkan insonga bog'liq agar u shu tehnologiyalar asosida boshlasa ishni, loyiha yakunlaganiga qadar shundan foydalanadi Frontend dasturchilar.
React query yordamida o'zim katta projectlar uchun hook sifatida yaratib olaman har bir Create, Update, Delete, Get uchun ulardan birini namuma sifatida ko'rsatib o'taman.
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { useTranslation } from 'react-i18next';
import { toast } from 'react-toastify';
import { request } from 'services/request';
const deleteRequest = (url) => request.delete(url);
const useDeleteQuery = ({ listKeyId }) => {
const queryClient = useQueryClient();
const { t } = useTranslation();
const { mutate, isError, error, isLoading } = useMutation(
({ url }: { url }) => deleteRequest(url),
{
onSuccess: (data) => {
toast.success(data?.data?.message || t('SUCCESSFULLY DELETED'));
if (listKeyId) {
queryClient.invalidateQueries(listKeyId);
}
},
onError: (error) => {
toast.error(error?.response?.data?.error?.message || 'ERROR');
}
}
);
return {
mutate,
isError,
error,
isLoading
};
};
export default useDeleteQuery;
Namunada ko'rganizdek Loyihadagi Delete function uchun alohida useDeleteQuery funksiyasi yozilgan va u orqali istalgan joyda, URL va KEY berish orqali foydalanish mumkin.
Shu bilan ushbu mavzudagi postni yakunlamoqchiman. Xato va kamchiliklar bo'lsa uzr va men ham sizdek shu sohadagi o'rganuvchi insonman.