Custom Hooks: Reusable Logic निकालना
stateful logic को custom use* functions में ले जाएँ, code दोहराए बिना components के बीच behaviour साझा करें और state lifting के बिना इसका उपयोग समझें।
Custom Hooks: Reusable Logic निकालना, CoddyKit पर Frontend Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Frontend Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Frontend Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कस्टम हुक क्या होते हैं
कस्टम हुक एक JavaScript फ़ंक्शन होता है जिसका नाम use से शुरू होता है और जो आंतरिक रूप से दूसरे हुक कॉल करता है। कस्टम हुक आपको स्थिति-संबंधी तर्क को अलग करके कई घटकों में साझा करने देते हैं, वह भी कोड की नकल किए बिना।
तर्क को कस्टम हुक में निकालना
घटकों में दोहराए गए तर्क की पहचान करें (डेटा लाना, लोड होने की स्थिति और त्रुटि, विंडो का आकार, localStorage) और उसे कस्टम हुक में ले जाएँ।
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handler = () => setWidth(window.innerWidth);
window.addEventListener('resize', handler);
return () => window.removeEventListener('resize', handler);
}, []);
return width;
}
// Usage:
const width = useWindowWidth();
const isMobile = width < 768;useFetch — डेटा प्राप्त करने वाला हुक
एक पुनः उपयोग योग्य डेटा प्राप्त करने वाला हुक, जिसका उपयोग कोई भी घटक URL से डेटा लोड करने के लिए कर सकता है।
function useFetch<T>(url: string) {
const [data, setData] = useState<T | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const controller = new AbortController();
async function load() {
try {
const res = await fetch(url, { signal: controller.signal });
if (!res.ok) throw new Error(`${res.status}`);
setData(await res.json());
} catch (err) {
if ((err as DOMException).name !== 'AbortError')
setError((err as Error).message);
} finally { setLoading(false); }
}
load();
return () => controller.abort();
}, [url]);
return { data, loading, error };
}useLocalStorage हुक
एक कस्टम हुक जो किसी मान को localStorage के साथ समकालित करता है और storage इवेंट के माध्यम से अलग-अलग टैब में भी समकालिक बना रहता है।
function useLocalStorage<T>(key: string, initialValue: T) {
const [value, setValue] = useState<T>(() => {
const stored = localStorage.getItem(key);
return stored ? JSON.parse(stored) : initialValue;
});
const set = useCallback((newValue: T) => {
setValue(newValue);
localStorage.setItem(key, JSON.stringify(newValue));
}, [key]);
return [value, set] as const;
}कस्टम हुक तर्क साझा करते हैं, स्थिति नहीं
कस्टम हुक को कॉल करने वाले प्रत्येक घटक को अपनी स्वतंत्र स्थिति मिलती है। हुक सिंगलटन नहीं होते — वे ऐसे फ़ंक्शन कॉल होते हैं जो अलग-अलग स्थिति इंस्टेंस बनाते हैं।
नामकरण परंपराएँ
कस्टम हुक के नाम use से शुरू होने चाहिए। इसे ESLint के react-hooks लिंटिंग नियम लागू करते हैं, जो सुनिश्चित करते हैं कि हुक शीर्ष स्तर पर और सही क्रम में कॉल किए जाएँ।
कई मान लौटाना
कस्टम हुक आमतौर पर एक ऑब्जेक्ट (नामित मान) या एक टपल (जैसे useState) लौटाते हैं। टपल आपको अपने नामों के साथ डिस्ट्रक्चर करने देते हैं; ऑब्जेक्ट स्वयं स्पष्ट होते हैं।
// Tuple (like useState):
const [value, setValue] = useLocalStorage('key', 0);
// Object (more descriptive):
const { data, loading, error, refetch } = useFetch('/api/users');useDebounce हुक
किसी मान पर डिबाउंस लागू करें: उपयोगकर्ता के टाइप करना बंद करने के बाद निर्धारित विलंब पूरा होने पर ही उसे अपडेट करें।
function useDebounce<T>(value: T, delay: number): T {
const [debounced, setDebounced] = useState(value);
useEffect(() => {
const timer = setTimeout(() => setDebounced(value), delay);
return () => clearTimeout(timer);
}, [value, delay]);
return debounced;
}
// Usage:
const debouncedSearch = useDebounce(searchTerm, 300);
useEffect(() => { search(debouncedSearch); }, [debouncedSearch]);useMediaQuery हुक
यह window.matchMedia को एक हुक में समाहित करता है, ताकि CSS मीडिया क्वेरी के परिणामों को प्रतिक्रियाशील रूप से पढ़ा जा सके।
function useMediaQuery(query: string): boolean {
const [matches, setMatches] = useState(() => window.matchMedia(query).matches);
useEffect(() => {
const mq = window.matchMedia(query);
const handler = (e: MediaQueryListEvent) => setMatches(e.matches);
mq.addEventListener('change', handler);
return () => mq.removeEventListener('change', handler);
}, [query]);
return matches;
}कस्टम हुक का परीक्षण
कस्टम हुक का स्वतंत्र रूप से परीक्षण करने के लिए @testing-library/react की renderHook() उपयोगिता का उपयोग करें, उन्हें किसी घटक में लपेटने की आवश्यकता नहीं है।
import { renderHook, act } from '@testing-library/react';
test('useCounter increments', () => {
const { result } = renderHook(() => useCounter(0));
expect(result.current.count).toBe(0);
act(() => result.current.increment());
expect(result.current.count).toBe(1);
});प्रकाशित हुक लाइब्रेरी
सामुदायिक हुक लाइब्रेरियाँ सैकड़ों परीक्षण किए हुए हुक उपलब्ध कराती हैं: @uidotdev/usehooks, react-use, usehooks-ts। कस्टम हुक लिखने से पहले जाँच लें कि उसका अच्छी तरह परीक्षण किया हुआ संस्करण पहले से मौजूद तो नहीं है।
त्वरित जाँच
जब किसी कस्टम हुक को दो अलग-अलग घटक कॉल करते हैं, तो उसके भीतर की स्थिति का क्या होता है?
पुनरावृत्ति: कस्टम हुक
कस्टम हुक पुनः उपयोग के लिए स्थिति-संबंधी तर्क अलग करते हैं। नाम में use उपसर्ग रखें। हुक कॉल करने वाले प्रत्येक घटक को स्वतंत्र स्थिति मिलती है। ऑब्जेक्ट या टपल लौटाएँ। सामान्य पैटर्न: useFetch, useLocalStorage, useDebounce, useMediaQuery। renderHook() से परीक्षण करें। शुरुआत से लिखने से पहले सामुदायिक लाइब्रेरियाँ जाँच लें।
एआई शिक्षक के साथ HTML सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 41
- पाठ
- 163
अक्सर पूछे जाने वाले प्रश्न
क्या “Custom Hooks: Reusable Logic निकालना” पाठ निःशुल्क है?
हाँ—“Custom Hooks: Reusable Logic निकालना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Frontend Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Frontend Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Custom Hooks: Reusable Logic निकालना” में मैं क्या सीखूँगा?
stateful logic को custom use* functions में ले जाएँ, code दोहराए बिना components के बीच behaviour साझा करें और state lifting के बिना इसका उपयोग समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Frontend Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Frontend Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Frontend Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Custom Hooks: Reusable Logic निकालना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Frontend Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Frontend Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Global State के लिए useContext
- Complex State के लिए useReducer
- Performance के लिए useMemo और useCallback
- Custom Hooks: Reusable Logic निकालना