Sunrabbit

[रिएक्ट हुक] useState

  • लेखन भाषा: कोरियाई
  • आधार देश: सभी देशcountry-flag
  • आईटी

रचना: 2024-03-14

रचना: 2024-03-14 01:53

रिएक्ट वाले इलाके में use से शुरू होने वाले नामों को बहुत पसंद किया जाता है

जैसे useServer, useCallback, useState, useMemo आदि

कस्टम हुक्स भी use से ही शुरू होते हैं

यह सब कहाँ से शुरू हुआ?


useState एक प्रसिद्ध हुक है।

यह स्टेट वैल्यू को स्टोर करता है, और जब यह बदलता है तो री-रेंडर करता है। यह बहुत ही सरल है।

यह सभी को पता है वाला उदाहरण है।


जब स्टेट वैल्यू बदलता है तो री-रेंडर होता है, लेकिन री-रेंडर का स्कोप क्या होता है?

सिर्फ p टैग? या फिर button टैग तक?


जवाब है, जहाँ useState को कॉल किया गया है, उस पूरे कंपोनेंट को।

ExampleComponent को री-रेंडर करता है, लेकिन

वर्चुअल डोम का इस्तेमाल करके वैल्यू की तुलना करके केवल जरूरी जगहों पर DOM को अपडेट करता है।


useState हर री-रेंडर पर कॉल होता है, तो वैल्यू कैसे मेन्टेन रहती है?

इसका जवाब useState के स्ट्रक्चर से मिलता है।

यह कोड रिएक्ट के useState का असली कोड है।


यह ग्लोबल ऑब्जेक्ट से dispatcher को लेता है और useState को कॉल करता है।

इससे स्ट्रक्चर समझ में नहीं आता है।


अगर हम इसे और डीप में देखें तो हमें यह कोड मिलेगा।

hook को लेता है और set फंक्शन को hook के queue से bind करके देता है।

(bind एक मौजूदा फंक्शन में this को बाइंड करता है, और बाकी आर्गुमेंट्स उस फंक्शन के आर्गुमेंट्स के तौर पर दिए जाते हैं, और फिर this को बाइंड करके एक नया फंक्शन रिटर्न करता है)


इससे कारण समझना मुश्किल है।

आगे बढ़ते हैं


हम देख सकते हैं कि हर बार init वैल्यू को असाइन किया जा रहा है। इससे स्टेट का मेन्टेन होना समझ में नहीं आता है।

आगे बढ़ते हैं। hook कुछ संदिग्ध लग रहा है।

currentlyRenderingFiber और workInProgressHook ग्लोबल वेरिएबल हैं।

यह दाएँ से बाएँ असाइनमेंट का उपयोग करके लिंक्ड लिस्ट बना रहा है।


इसलिए, हुक का स्ट्रक्चर कुछ इस तरह से होगा।

यह हेड में वैल्यू को जोड़ता जा रहा है।


अभी भी समझ में नहीं आ रहा है, इसलिए मैंने दूसरे useState इम्प्लीमेंटेशन को देखा।

सभी mountState को कॉल नहीं कर रहे थे, और री-रेंडर होने पर updateState और rerenderState को कॉल कर रहे थे।

इसलिए, स्ट्रक्चर ऊपर वाला ही है, और इवेंट के आधार पर अलग-अलग फंक्शन कॉल होते हैं।

अगर आप कोड को खुद देखना चाहते हैं तो react/packages/react-reconciler/src/ReactFiberHooks.js देख सकते हैं।

टिप्पणियाँ0

Nuxt.js में कस्टम निर्देशिका बनानायह लेख बताता है कि Nuxt.js में कस्टम स्क्रॉल निर्देशिका कैसे बनाई जाती है। इसमें bind, inserted, update, componentUpdated, unbind जैसे हुक फंक्शन के उपयोग और Nuxt प्लगइन पंजीकरण विधि शामिल है।
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들

September 28, 2024

[इफेक्टिव जावा] आइटम 6. अनावश्यक ऑब्जेक्ट निर्माण से बचेंअनावश्यक ऑब्जेक्ट निर्माण मेमोरी की बर्बादी का कारण बनता है, इसलिए स्ट्रिंग या बूलियन जैसे ऑब्जेक्ट के लिए लिटरल या स्टेटिक फैक्ट्री मेथड का उपयोग करना बेहतर होता है।
제이온
제이온
제이온
제이온

April 28, 2024

रिएक्ट - kakao परिभाषित नहीं है, इसे कैसे ठीक करें?रिएक्ट में Kakao मानचित्र API का उपयोग करते समय kakao परिभाषित नहीं है त्रुटि को हल करने के तरीके प्रस्तुत किए गए हैं। कंपोनेंट के बाहर kakao ऑब्जेक्ट घोषित करके या कस्टम हुक का उपयोग करके इसे हल किया जा सकता है।
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들

September 2, 2024

API प्रतिक्रियाओं को कैश करने का तरीका + वेब पेज कैशिंगयह लेख वेब पेज और API प्रतिक्रिया कैशिंग विधियों का परिचय देता है। इसमें ब्राउज़र स्टोरेज, एक्सियोस इंटरसेप्टर, नक्सट फ़्रेमवर्क, Nginx आदि का उपयोग करके विभिन्न कैशिंग तकनीकों और सर्वर-साइड कैशिंग के फायदे और नुकसानों की व्याख्या की गई है।
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들
뚠뚠멍의 생각들

September 29, 2024

[गैर-तकनीकी, डेवलपर के रूप में जीवित रहना] 14. नव नियुक्त डेवलपर अक्सर पूछे जाने वाले तकनीकी साक्षात्कार सामग्री सारांशनव नियुक्त डेवलपर साक्षात्कार में अक्सर पूछे जाने वाले तकनीकी प्रश्न (मेमोरी क्षेत्र, डेटा संरचना, डेटाबेस आदि) को संक्षेप में प्रस्तुत किया गया है। डेवलपमेंट इंटरव्यू की तैयारी में यह मददगार होगा।
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

फ्लिटर 1.0.0 जारी: D3 का विकल्प SVG लाइब्रेरीफ्लिटर 1.0.0 एक SVG-आधारित डेटा विज़ुअलाइज़ेशन लाइब्रेरी है, जिसने React के साथ संगतता को मजबूत किया है और SSR समर्थन में सुधार किया है। इसमें प्रदर्शन में सुधार और बग फिक्स भी शामिल हैं।
Meursyphus
Meursyphus
Meursyphus
Meursyphus

May 1, 2024