रिएक्ट के कॉन्टेक्स्ट एपीआई के साथ काम करते समय, उन मामलों को संभालना महत्वपूर्ण है जहां घटक प्रदाता के बाहर संदर्भ तक पहुंचने का प्रयास करते हैं। यदि आप ऐसा नहीं करते हैं, तो इससे अनपेक्षित परिणाम या ट्रैक-टू-ट्रैक करने में कठिन बग हो सकते हैं।
समस्या
जब आप createContext() का उपयोग करके एक संदर्भ बनाते हैं, तो आपके पास एक डिफ़ॉल्ट मान पास करने का विकल्प होता है। यदि कोई घटक प्रदाता के बाहर संदर्भ तक पहुंचने का प्रयास करता है तो यह डिफ़ॉल्ट मान वापस आ जाता है।
यदि आप createContext() के लिए डिफ़ॉल्ट मान पास नहीं करते हैं, तो प्रदाता के बाहर संदर्भ तक पहुंच अपरिभाषित वापस आ जाएगी।
यदि आप एक डिफ़ॉल्ट मान (जैसे शून्य या कोई अन्य मान) पास करते हैं, तो वह मान तब वापस कर दिया जाएगा जब संदर्भ किसी प्रदाता के बाहर एक्सेस किया जाता है।
उदाहरण के लिए:
const PostContext = React.createContext(null); // Default value is null
इस मामले में, यदि कोई घटक प्रदाता में लिपटे बिना पोस्टकॉन्टेक्स्ट तक पहुंचने का प्रयास करता है, तो यह शून्य हो जाएगा।
समाधान: त्रुटि प्रबंधन के साथ एक कस्टम हुक
उन स्थितियों से बचने के लिए जहां संदर्भ को उसके प्रदाता के बाहर एक्सेस किया जाता है, हम एक कस्टम हुक बना सकते हैं जो संदर्भ को गलत तरीके से एक्सेस करने पर एक त्रुटि उत्पन्न करता है। यह विकास की शुरुआत में ही गलतियों को पकड़ने के लिए उपयोगी है।
function usePosts() { const context = useContext(PostContext); if (context === null) { // checking for "null" because that's the default value passed in createContext throw new Error("usePosts must be used within a PostProvider"); } return context; }
यह महत्वपूर्ण क्यों है
यदि कोई त्रुटि प्रबंधन नहीं है, तो इसके प्रदाता के बाहर संदर्भ तक पहुंच शून्य, अपरिभाषित, या आपके द्वारा उपयोग किए गए किसी भी डिफ़ॉल्ट मान पर वापस आ सकती है। इससे आपके ऐप में डिबग करने में कठिन समस्याएं पैदा हो सकती हैं। किसी त्रुटि को फेंकने से, समस्या को जल्दी से पकड़ना और ठीक करना बहुत आसान हो जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3