جاري التحميل...
جاري التحميل...
إنشاء hooks خاصة بمشروعك
الخطافات المخصصة هي دوال JavaScript تبدأ بـ use ويمكنها استخدام خطافات أخرى داخلها.
💡 تشبيه بسيط:
الخطافة المخصصة مثل وصفة طبخ. أنت تكتب الوصفة مرة واحدة (الدالة)، ثم تستخدمها كلما أردت طبخ هذا الطبق. يمكنك تعديل المقادير (المعاملات) حسب الحاجة. الوصفة قابلة لإعادة الاستخدام وتنطبق على مكونات مختلفة.
تسمح لك باستخراج منطق المكون في دوال قابلة لإعادة الاستخدام، وتجنب تكرار الكود.
الخطافات المخصصة هي طريقة لإعادة استخدام المنطق الم满的状态 بين مكونات مختلفة.
يجب أن تبدأ الخطافات المخصصة بكلمة use (مثل useCounter و useFetch و useLocalStorage).
💡 مهم:
هذه الاتفاقية تخبر React بأن الدالة تتبع قواعد الخطافات.
خطاف بسيط يغلف منطق العداد: الحالة، الزائد، الناقص، وإعادة التعيين.
خطاف يغلف منطق جلب البيانات مع حالات التحميل والأخطاء.
بماذا يجب أن تبدأ الخطافة المخصصة؟
ماذا يمكنك فعله داخل خطافة مخصصة؟
ما هي الفائدة الرئيسية للخطافات المخصصة؟
هل تشارك المكونات الحالة في الخطافات المخصصة؟
ابنِ خطافة مخصصة تُزامن الحالة مع localStorage.
الحل:
// useFetch hook
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const controller = new AbortController();
async function fetchData() {
try {
setLoading(true);
const response = await fetch(url, { signal: controller.signal });
if (!response.ok) throw new Error("فشل الجلب");
const result = await response.json();
setData(result);
} catch (err) {
if (err.name !== "AbortError") setError(err.message);
} finally {
setLoading(false);
}
}
fetchData();
return () => controller.abort();
}, [url]);
return { data, loading, error };
}
// useToggle hook
function useToggle(initialValue = false) {
const [value, setValue] = useState(initialValue);
const toggle = () => setValue(prev => !prev);
return { value, toggle };
}الهيكل الأساسي:
الاستخدام:
ما هي القاعدة الوحيدة للخطافات المخصصة؟
الإجابة:
يجب أن تبدأ بكلمة 'use'.
هل تتشارك الخطافات المخصصة الحالة بين المكونات؟
الإجابة:
لا. كل مكون يحصل على نسخته الخاصة من الحالة.
سمّ خطافاتك بوضوح
useFetch، useToggle، useLocalStorage — الاسم يصف ما تفعله