पिछले हफ्ते मैंने एक RxJS प्रश्न का उत्तर दिया, जहाँ मैं एक अन्य समुदाय के सदस्य के साथ चर्चा में मिला: "क्या मुझे हर विशिष्ट दुष्प्रभाव के लिए सदस्यता बनानी चाहिए या क्या मुझे सामान्य रूप से सदस्यता कम करने का प्रयास करना चाहिए?" मैं जानना चाहता हूं कि पूर्ण प्रतिक्रियाशील एप्लिकेशन दृष्टिकोण के संदर्भ में मैथोलॉजी का उपयोग क्या करना है या कब एक से दूसरे में स्विच करना है। इससे मुझे और शायद दूसरों को अनैच्छिक चर्चा से बचने में मदद मिलेगी।
सेटअप जानकारी
- सभी उदाहरण टाइपस्क्रिप्ट में हैं
- प्रश्न पर बेहतर ध्यान केंद्रित करने के लिए, सदस्यता के लिए जीवनचक्र / निर्माणकर्ताओं के उपयोग और असंबंधित ढांचे में न रखने के लिए
- कल्पना करें: सब्सक्राइबर को कंस्ट्रक्टर / लाइफसाइकल इनिट में जोड़ा जाता है
- कल्पना कीजिए: बिना साइकल चलाना जीवनचक्र को नष्ट करने में किया जाता है
एक दुष्प्रभाव (कोणीय नमूना) क्या है
- UI में अपडेट / इनपुट (उदाहरण के लिए
value$ | async
) - आउटपुट / एक घटक के अपस्ट्रीम (जैसे
@Output event = event$
) - विभिन्न पदानुक्रमों पर विभिन्न सेवाओं के बीच परस्पर क्रिया
अनुकरणीय usecase:
- दो कार्य:
foo: () => void; bar: (arg: any) => void
- दो स्रोत वेधशाला:
http$: Observable<any>; click$: Observable<void>
foo
के बाद कहा जाताhttp$
है उत्सर्जित और कोई मूल्य की जरूरत हैbar
click$
उत्सर्जन के बाद कहा जाता है , लेकिन वर्तमान मूल्य की जरूरत हैhttp$
केस: हर विशिष्ट साइड इफेक्ट के लिए एक सदस्यता बनाएँ
const foo$ = http$.pipe(
mapTo(void 0)
);
const bar$ = http$.pipe(
switchMap(httpValue => click$.pipe(
mapTo(httpValue)
)
);
foo$.subscribe(foo);
bar$.subscribe(bar);
केस: सामान्य रूप से सदस्यता कम करें
http$.pipe(
tap(() => foo()),
switchMap(httpValue => click$.pipe(
mapTo(httpValue )
)
).subscribe(bar);
संक्षेप में मेरी अपनी राय
मैं इस तथ्य को समझ सकता हूं कि सब्सक्राइबर्स आरएक्स लैंडस्केप्स को पहले से अधिक जटिल बनाते हैं, क्योंकि आपको यह सोचना होगा कि सब्सक्राइबर्स को पाइप को कैसे प्रभावित करना चाहिए या उदाहरण के लिए नहीं (अपने अवलोकन योग्य या नहीं साझा करें)। लेकिन जितना अधिक आप अपने कोड को अलग करते हैं (जितना अधिक आप ध्यान केंद्रित करते हैं: क्या होता है) जब भविष्य में आपके कोड को बनाए रखना (परीक्षण, डिबग, अपडेट) करना आसान होता है। इस बात को ध्यान में रखते हुए कि मैं अपने कोड में किसी भी साइड इफेक्ट के लिए हमेशा एक ही ऑब्जर्वेबल सोर्स और सिंगल सब्सक्रिप्शन बनाता हूं। यदि दो या दो से अधिक साइड इफेक्ट्स मुझे ठीक उसी स्रोत के अवलोकन से ट्रिगर होते हैं, तो मैं अपने अवलोकन को साझा करता हूं और प्रत्येक साइड इफेक्ट के लिए व्यक्तिगत रूप से सदस्यता लेता हूं, क्योंकि इसमें अलग-अलग जीवन चक्र हो सकते हैं।