यह एक पागल विचार की तरह लगता है, लेकिन अगर मैं अपने ब्राउज़र की वैश्विक स्थिति को केवल एसपीए स्टोर करने के लिए ग्लोबलइस का उपयोग करता हूं तो क्या कोई समस्या है।

मैं कुछ इस तरह सोच रहा हूँ

globalThis.state = {...initialStateData}; // attach a property to globalThis and initialize
//later in any component, mutate the value
globalThis.state.counter = 45;
//yet in some other area, access and display the value
console.log(globalThis.state.counter);

इसे मिश्रण में परदे के पीछे डालकर और हल्के वजन के रेडक्स जैसा कुछ बनाकर आगे बढ़ाया जा सकता है।

मैंने क्रोम में इसका परीक्षण किया, और यह काम करता है (कामों से मेरा मतलब है कि क्रोम को मेरे डेटा को ग्लोबलिस से जोड़ने पर कोई आपत्ति नहीं थी)।

मेरा सवाल यह है कि क्या यह एक पागल विचार है और कुछ मानकों के कारण उत्पादन ऐप में इसका इस्तेमाल नहीं किया जाना चाहिए जिसका मैं अज्ञानता में उल्लंघन कर रहा हूं?

या शायद, GlobalThis का व्यवहार समय के साथ बदलने वाला है और ब्राउज़र इस विशिष्ट वस्तु के लिए उपयोगकर्ता-संलग्न विशेषताओं की अनुमति नहीं देंगे?

संपादित करें: यह प्रश्न शुद्ध वेनिला जेएस के बारे में है और रेडक्स या प्रतिक्रिया या टाइपस्क्रिप्ट के बारे में नहीं है।

Deno में ग्लोबल वेरिएबल को कैसे परिभाषित करें? का निकटतम मैच होगा वर्तमान क्वेरी

1
ama 2 फरवरी 2021, 07:43

2 जवाब

सबसे बढ़िया उत्तर

आमतौर पर निम्नलिखित कारणों से GlobalThis (या विंडो) को संशोधित करने की अनुशंसा नहीं की जाती है:

  • तृतीय पक्ष कोड के साथ नामकरण विरोध: यदि कोई अन्य स्क्रिप्ट भी वैश्विक इसे संशोधित करती है और वही नाम चुनती है, तो आप मुश्किल में हैं, हालांकि यह मुख्य पृष्ठ के तर्क की तुलना में पुस्तकालयों पर अधिक लागू होता है।
  • जावास्क्रिप्ट के साथ नामकरण संघर्ष: नई अंतर्निर्मित जावास्क्रिप्ट उपयोगिताओं को वैश्विक वस्तु में जोड़ा जाता है - यदि उन्होंने कभी भी उसी नाम के साथ एक जोड़ा है जिसका आप उपयोग कर रहे हैं, तो यह आपके दोनों में समस्याएं पैदा करेगा। पृष्ठ, और आपके द्वारा उपयोग की जाने वाली कोई भी लाइब्रेरी जो उस उपयोगिता के होने की अपेक्षा करती है। हालांकि, जब तक आपका नाम पर्याप्त रूप से अद्वितीय है, यह वास्तव में कोई बड़ी समस्या नहीं है।
  • संस्करण: यदि आप एक पुस्तकालय विकसित कर रहे हैं, तो दुर्भाग्य से ऐसे परिदृश्य हैं जहां आपके पास एक ही पुस्तकालय के कई संस्करण एक साथ लोड हो सकते हैं। यह संभव नहीं है यदि वे वैश्विक स्थिति का उपयोग करते हैं। दोबारा, यह वास्तव में उपयोग पर लागू नहीं होता है क्योंकि आप पुस्तकालय विकसित नहीं कर रहे हैं।
  • ट्रेसेबिलिटी: यह जानना मुश्किल है कि वैश्विक स्थिति क्या निर्धारित करती है और क्या इसे संशोधित करती है।

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

0
Scotty Jamison 2 फरवरी 2021, 09:55

ब्राउज़र के globalThis या विंडो ऑब्जेक्ट को संशोधित करना गैर-पारंपरिक है और इससे कुछ समस्याएं पैदा होंगी जिन्हें डीबग करना या ठीक करना मुश्किल होगा.. यह भी एक तरह का है ऑब्जेक्ट प्रदूषण और एस्लिंट/जेशिंट के बारे में भी शिकायत होगी और टाइपस्क्रिप्ट कंपाइल टाइम एरर फेंक देगा .. इसे उत्पादन में न करें क्योंकि यह लंबे समय में बहुत खराब होगा .. उनमें से एक परस्पर विरोधी संपत्ति नाम है और कई समस्याएं उत्पन्न होंगी। मैं उनमें से प्रत्येक को नहीं जानता लेकिन आप इस व्यवहार के बारे में कुछ मध्यम पुस्तकें/लेख आसानी से पढ़ सकते हैं। यही कारण है कि आधुनिक npm पैकेज इन वस्तुओं को स्पर्श नहीं करते हैं क्योंकि globalThis मॉड्यूल के विचार की अनुमति नहीं देता... globalThis/ का उपयोग करके देखें विंडो केवल पढ़ने के लिए ऑब्जेक्ट के रूप में.. इसके प्रॉप्स को न बदलें..

आशा है आप समझ गए होंगे मैंने क्या कहा..

1
KR Tirtho 2 फरवरी 2021, 07:55