React Academy · पाठ

कस्टम Hook useThrottle लागू करना

ऐसा useThrottle हुक बनाएँ जो स्क्रॉल जैसी तेज़ घटनाओं के दौरान किसी मान के अपडेट होने की आवृत्ति सीमित करे

पाठ 3, कुल 4 में से13 चरण

कस्टम Hook useThrottle लागू करना, CoddyKit पर React Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह React Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

थ्रॉटल डिबाउंस से कठिन है

डिबाउंस हर घटना पर टाइमर को सरलता से फिर से शुरू करता है। थ्रॉटल को सक्रिय रूप से यह दर्ज करना पड़ता है कि अंतिम निष्पादन कब हुआ था और यह तय करना पड़ता है कि अगली बार चलने के लिए पर्याप्त समय बीता है या नहीं। इसके लिए पुनः-रेंडर के बीच एक समय-चिह्न बनाए रखना पड़ता है, जिससे इसका कार्यान्वयन डिबाउंस की तुलना में थोड़ा अधिक जटिल हो जाता है।

lastRunTime के लिए useRef का उपयोग

अंतिम निष्पादन का समय-चिह्न पुनः-रेंडर शुरू किए बिना कई रेंडर के बीच बना रहना चाहिए, इसलिए useRef इसके लिए सही साधन है। समय-चिह्न को इस प्रकार संग्रहीत कीजिए: const lastRunTime = useRef(Date.now())। स्थिति के विपरीत, रेफ़ को अपडेट करने से पुनः-रेंडर नहीं होता, इसलिए थ्रॉटल तर्क अतिरिक्त चक्रों के बिना कुशलता से चलता है।

हुक का हस्ताक्षर

useThrottle(value, delay) हुक इनपुट मान का थ्रॉटल किया हुआ रूप लौटाता है। इसका अनुबंध useDebounce के समान है: कोई भी मान और मिलीसेकंड में एक विलंब स्वीकार करना तथा थ्रॉटल किया हुआ मान लौटाना। घटक इसका उपयोग उसी तरह करते हैं, इसलिए अलग-अलग समय-निर्धारण व्यवहारों के लिए यह सीधे इस्तेमाल किया जा सकने वाला विकल्प है।

अंतिम-किनारा कार्यान्वयन

अंतिम-किनारा थ्रॉटल प्रत्येक अंतराल के अंत में मान को अद्यतन करता है। नया मान आने पर, शेष अंतराल अवधि के लिए setTimeout निर्धारित करें: delay - (Date.now() - lastRunTime.current)। टाइमर चलने पर स्थिति को अद्यतन करें और नया lastRunTime दर्ज करें। सफ़ाई प्रक्रिया में पिछले टाइमर रद्द करें।

अग्रणी-किनारा कार्यान्वयन

अग्रणी-किनारा थ्रॉटल पहले मान को तुरंत लागू करता है और अंतराल समाप्त होने तक बाद वाले मानों को अनदेखा करता है। जाँचें: यदि Date.now() - lastRunTime.current >= delay है, तो स्थिति को अद्यतन करें और समय दर्ज करें। अन्यथा, अद्यतन छोड़ दें। इससे पहली क्रिया पर तत्काल प्रतिक्रिया मिलती है और उसके बाद विराम अवधि रहती है।

अग्रणी और अंतिम किनारों का संयोजन

अक्सर सर्वोत्तम उपयोगकर्ता अनुभव में दोनों का संयोजन होता है: पहली घटना पर तुरंत प्रतिक्रिया दें (अग्रणी), फिर यह सुनिश्चित करें कि अंतराल के बाद अंतिम स्थिति भी लागू हो जाए (अंतिम)। इसका अर्थ है कि उपयोगकर्ता को शुरुआत में तेज़ प्रतिक्रिया दिखाई देती है और गति रुकने के बाद अंतिम स्थिर मान हमेशा लागू हो जाता है, जिससे अंतिम स्थिति पुरानी नहीं रहती।

टाइमर ID के लिए useRef का उपयोग

लंबित टाइमर ID को useRef में रखें: const timeoutRef = useRef(null)। नया टाइमर निर्धारित करने से पहले, किसी मौजूदा टाइमर को रद्द करने के लिए clearTimeout(timeoutRef.current) चलाएँ। इससे एक-दूसरे पर चढ़ने वाले कई टाइमर नहीं बनते, जो एक ही थ्रॉटल अंतराल में कई अद्यतन कर सकते थे।

घटक हटाए जाने पर सफ़ाई

घटक हटाए जाने पर किसी भी लंबित अंतिम अद्यतन को रद्द करने के लिए useEffect की सफ़ाई प्रक्रिया में clearTimeout(timeoutRef.current) चलना चाहिए। इसके बिना, घटक हटाए जाने के बाद लंबित टाइमर चल जाता है और हटाए गए घटक की स्थिति निर्धारित करने का प्रयास करता है, जिससे React की चेतावनियाँ आ सकती हैं।

थ्रॉटल किए गए कॉलबैक का विकल्प

मान-आधारित हुक के बजाय, आप useCallback-आधारित थ्रॉटल हुक बना सकते हैं: useThrottledCallback(fn, delay) किसी फ़ंक्शन का थ्रॉटल किया हुआ संस्करण लौटाता है। यह तब अधिक लचीला होता है जब आप जिस क्रिया को थ्रॉटल करना चाहते हैं वह प्रतिक्रियाशील मान के बजाय फ़ंक्शन कॉल हो, जैसे विश्लेषण-ट्रैकर को चलाना।

कृत्रिम टाइमर के साथ थ्रॉटल का परीक्षण

Jest परीक्षणों में समय को नियंत्रित करने के लिए jest.useFakeTimers() का उपयोग करें। 1000 मिलीसेकंड की देरी वाला थ्रॉटल बनाएँ, मान में 10 तेज़ बदलाव करें, फिर कृत्रिम समय को 500 मिलीसेकंड आगे बढ़ाएँ और जाँचें कि केवल 1 या 2 अद्यतन हुए हैं। अगले 500 मिलीसेकंड आगे बढ़ाएँ और सत्यापित करें कि अंतिम अद्यतन चलता है। इससे थ्रॉटल के व्यवहार का नियतात्मक रूप से सत्यापन होता है।

React मॉडल में थ्रॉटल

React रेंडर के दौरान स्थिति अद्यतनों को समूहों में संसाधित करता है। स्थिति अद्यतनों पर काम करने वाला थ्रॉटल इस मॉडल में सुचारु रूप से काम करता है। हालाँकि, React 18 के समवर्ती मोड में रेंडर बाधित किए जा सकते हैं। थ्रॉटल का तर्क स्वयं, जो Date.now() के माध्यम से वास्तविक घड़ी के समय पर आधारित है, React की समय-निर्धारण प्रक्रिया से प्रभावित नहीं होता।

थ्रॉटल का अंतिम किनारा बनाम अग्रणी किनारा

"अंतिम" थ्रॉटल किस किनारे पर चलता है?

पाठ का पुनरावलोकन: useThrottle हुक

थ्रॉटल के लिए useRef की सहायता से अंतिम निष्पादन समय को ट्रैक करना आवश्यक है। हुक अग्रणी किनारा (तत्काल), अंतिम किनारा (स्थगित), या दोनों लागू कर सकता है। टाइमर ID को हमेशा रेफ़ में रखें और सफ़ाई प्रक्रिया में उसे रद्द करें। फ़ंक्शन-आधारित उपयोग के लिए useThrottledCallback पैटर्न को प्राथमिकता दें। विश्वसनीयता के लिए कृत्रिम टाइमर के साथ परीक्षण करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ React सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
88
पाठ
324

अक्सर पूछे जाने वाले प्रश्न

क्या “कस्टम Hook useThrottle लागू करना” पाठ निःशुल्क है?

हाँ—“कस्टम Hook useThrottle लागू करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और React Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कस्टम Hook useThrottle लागू करना” में मैं क्या सीखूँगा?

ऐसा useThrottle हुक बनाएँ जो स्क्रॉल जैसी तेज़ घटनाओं के दौरान किसी मान के अपडेट होने की आवृत्ति सीमित करे आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ React Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या React Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर React Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“कस्टम Hook useThrottle लागू करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस React Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर React Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. UI में Debounce और Throttle क्यों महत्वपूर्ण हैं
  2. कस्टम Hook useDebounce लागू करना
  3. कस्टम Hook useThrottle लागू करना
  4. व्यावहारिक उपयोग: खोज, स्क्रॉल, आकार बदलना
← React Academy पर वापस जाएँ