TypeScript में Subject बनाम BehaviorSubject: मुख्य अंतर

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Subject और BehaviorSubject: रिएक्टिव प्रोग्रामिंग की दुनिया के दो भाई-बहन

\n\n

यदि आपने कभी Stack Overflow पर "What is the difference between Subject and BehaviorSubject?" चर्चा देखी है, तो आप जानते हैं: यह विषय हजारों व्यूज इकट्ठा करता है। और यह आश्चर्यजनक नहीं है - यह उन प्रश्नों में से एक है जो देर-सबेर TypeScript में RxJS के साथ काम करने वाले हर डेवलपर के सामने आता है।

\n\n

कल्पना करें कि आप एक लाइव डेटा प्रसारण का प्रबंधन कर रहे हैं। Subject एक खुले माइक्रोफोन की तरह है: जो पहले सब्सक्राइब करेगा, उसे वही सब कुछ मिलेगा जो बाद में कहा जाएगा। और BehaviorSubject एक माइक्रोफोन है जो हमेशा अंतिम वाक्य को संग्रहीत करता है और तुरंत इसे एक नए श्रोता को दोहराता है। अंतर महसूस कर रहे हैं?

\n\n

इस लेख में, हम केवल दस्तावेज़ीकरण को दोबारा नहीं बताएंगे। हम वास्तविक मामलों पर चर्चा करेंगे, TypeScript पर कोड उदाहरण दिखाएंगे और चयन के स्पष्ट नियम देंगे। चलिए शुरू करते हैं!

\n\n

TypeScript में Subject क्या है?

\n\n

Subject एक विशेष प्रकार का Observable है जो एक साथ Observer भी है। यह next() विधि के माध्यम से डेटा प्राप्त कर सकता है और इसे सभी सब्सक्राइबर्स को भेज सकता है। लेकिन एक महत्वपूर्ण बारीकी है: Subject पिछले मानों को संग्रहीत नहीं करता है।

\n\n

TypeScript पर एक सरल उदाहरण:

\n\n
import { Subject } from 'rxjs';\n\nconst subject = new Subject<string>();\n\n// डेटा भेजे जाने के बाद सब्सक्राइब करना\nsubject.next('पहला संदेश');\nsubject.next('दूसरा संदेश');\n\n// यह सब्सक्राइबर कुछ भी प्राप्त नहीं करेगा\nsubject.subscribe({\n  next: (value) => console.log('सब्सक्राइबर:', value)\n});\n\n// लेकिन यह दिखाई देगा\nsubject.next('तीसरा संदेश');\n
\n\n

कंसोल में क्या आउटपुट होगा? केवल "सब्सक्राइबर: तीसरा संदेश"। पहले दो संदेश इस सब्सक्राइबर के लिए हमेशा के लिए खो गए हैं। इस प्रभाव को "कोल्ड स्टार्ट" कहा जाता है - आपको केवल वही डेटा मिलता है जो सब्सक्रिप्शन के बाद भेजा गया था।

\n\n

BehaviorSubject: जब अतीत को याद रखना आवश्यक हो

\n\n

BehaviorSubject वही Subject है, लेकिन एक सुपरपावर के साथ: यह हमेशा अंतिम मान को संग्रहीत करता है और सब्सक्रिप्शन के तुरंत बाद इसे नए सब्सक्राइबर को देता है। अनिवार्य शर्त - प्रारंभिक मान निर्दिष्ट करना आवश्यक है।

\n\n
import { BehaviorSubject } from 'rxjs';\n\nconst behaviorSubject = new BehaviorSubject<string>('प्रारंभिक मान');\n\n// सब्सक्राइब करें - तुरंत अंतिम मान प्राप्त करें\nbehaviorSubject.subscribe({\n  next: (value) => console.log('पहला सब्सक्राइबर:', value)\n});\n\nbehaviorSubject.next('पहला अपडेट');\nbehaviorSubject.next('दूसरा अपडेट');\n\n// यह सब्सक्राइबर तुरंत 'दूसरा अपडेट' प्राप्त करेगा\nbehaviorSubject.subscribe({\n  next: (value) => console.log('दूसरा सब्सक्राइबर:', value)\n});\n
\n\n

कंसोल आउटपुट:

\n
पहला सब्सक्राइबर: प्रारंभिक मान\nपहला सब्सक्राइबर: पहला अपडेट\nपहला सब्सक्राइबर: दूसरा अपडेट\nदूसरा सब्सक्राइबर: दूसरा अपडेट\n
\n\n

देखा? दूसरे सब्सक्राइबर को तुरंत अंतिम मान मिल गया, भले ही उसने बाद में सब्सक्राइब किया। यह BehaviorSubject और Subject के बीच मुख्य अंतर है।

\n\n

Subject और BehaviorSubject की तुलना: अंतरों की तालिका

\n\n

आइए सभी अंतरों को एक स्पष्ट तालिका में संक्षेपित करें जो साक्षात्कार या वास्तविक प्रोजेक्ट में काम आएगी।

\n\n
    \n
  • प्रारंभिक मान: Subject - नहीं। BehaviorSubject - अनिवार्य रूप से आवश्यक।
  • \n
  • अंतिम मान का भंडारण: Subject - संग्रहीत नहीं करता। BehaviorSubject - संग्रहीत करता है और नए सब्सक्राइबर को देता है।
  • \n
  • देर से सब्सक्रिप्शन पर व्यवहार: Subject - सभी पिछली घटनाओं को छोड़ देता है। BehaviorSubject - अंतिम मान देता है।
  • \n
  • Angular के साथ उपयोग: Subject - घटनाओं के लिए (क्लिक, टाइमर)। BehaviorSubject - स्थिति के लिए (उपयोगकर्ता डेटा, सेटिंग्स)।
  • \n
  • getValue() विधि: Subject - अनुपस्थित। BehaviorSubject - मौजूद है, वर्तमान मान को सिंक्रोनस रूप से लौटाता है।
  • \n
\n\n

Subject का उपयोग कब करें और BehaviorSubject का कब करें

ब्लॉग

पुस्तक अनुशंसाएँ