डिस्क्लेमर: मैं redux-observable के लेखकों में से एक हूं इसलिए मेरे लिए 100% निष्पक्ष होना कठिन है।
वर्तमान में हम कोई कारण नहीं बता रहे हैं कि redux-sagga redux-saga से बेहतर है क्योंकि ... यह नहीं है। 😆
tl; डॉ। दोनों के पक्ष और विपक्ष हैं। कई लोग एक दूसरे की तुलना में अधिक सहज पाएंगे, लेकिन दोनों अलग-अलग तरीकों से सीखने के लिए जटिल हैं यदि आप आरएक्सजेएस (रिड्यूक्स-ऑब्जर्वेबल) या जनरेटर / "डेटा के रूप में प्रभाव" (रेडक्स-सागा) को नहीं जानते हैं।
वे एक ही समस्या को बेहद समान तरीकों से हल करते हैं, लेकिन कुछ बुनियादी अंतर हैं जो केवल एक बार स्पष्ट रूप से स्पष्ट हो जाते हैं जब आप उन्हें पर्याप्त रूप से उपयोग करते हैं।
redux- अवलोकनीय लगभग हर चीज को मुहावरेदार RxJS से बचाता है। इसलिए यदि आपके पास आरएक्सजेएस ज्ञान है (या इसे प्राप्त करें), तो सीखना और रिड्यूक्स-ऑब्जर्वेबल का उपयोग करना सुपर सुपर प्राकृतिक है। इसका मतलब यह भी है कि यह ज्ञान redux के अलावा अन्य चीजों के लिए हस्तांतरणीय है। यदि आप MobX पर स्विच करने का निर्णय लेते हैं, यदि आप Angular2 पर स्विच करने का निर्णय लेते हैं, यदि आप भविष्य के कुछ हॉटनेस एक्स पर स्विच करने का निर्णय लेते हैं, तो संभावना बहुत अच्छी है कि RxJS आपकी मदद कर सकता है। इसका कारण यह है कि RxJS एक सामान्य एसिंक्स लाइब्रेरी है, और कई मायनों में अपने आप में एक प्रोग्रामिंग भाषा की तरह है- संपूर्ण "रिएक्टिव प्रोग्रामिंग" प्रतिमान। RxJS 2012 से अस्तित्व में है और Rx.NET के पोर्ट के रूप में शुरू हुआ (लगभग हर प्रमुख भाषा में "पोर्ट" हैं, यह उपयोगी है )।
Redux-saga अपने समय-आधारित ऑपरेटरों को स्वयं प्रदान करता है, इसलिए जब आप इस प्रक्रिया-प्रबंधक शैली में जनरेटरों को संभालने और दुष्प्रभावों से निपटने के बारे में ज्ञान प्राप्त करते हैं, तो वास्तविक ऑपरेटर और उपयोग किसी अन्य प्रमुख लाइब्रेरी में उपयोग नहीं किया जाता है। तो यह थोड़ा दुर्भाग्यपूर्ण है, लेकिन निश्चित रूप से अपने आप में एक सौदा-ब्रेकर नहीं होना चाहिए।
यह "प्रभाव के रूप में डेटा" ( यहां वर्णित ) का भी उपयोग करता है , जो आपके सिर को पहले चारों ओर लपेटना मुश्किल हो सकता है, लेकिन इसका मतलब है कि आपका Redux-saga कोड वास्तव में स्वयं साइड इफेक्ट्स नहीं करता है। इसके बजाय, आप जिस सहायक कार्य का उपयोग करते हैं, वह ऐसी वस्तुएं बनाता है जो ऐसे कार्य हैं जो साइड इफेक्ट करने के इरादे का प्रतिनिधित्व करते हैं और फिर आंतरिक पुस्तकालय इसे आपके लिए निष्पादित करता है। यह मॉकिंग की आवश्यकता के बिना परीक्षण को बहुत आसान बनाता है, और कुछ लोगों के लिए बहुत आकर्षक है। हालाँकि, मैंने व्यक्तिगत रूप से पाया है कि इसका मतलब है कि आपकी इकाई परीक्षण आपकी गाथा के बहुत सारे तर्क को फिर से लागू करती है - उन परीक्षणों को बहुत उपयोगी नहीं बना रही है IMO (यह राय सभी ने साझा नहीं की है)
लोग अक्सर पूछते हैं कि हम ऐसा क्यों नहीं करते हैं जैसे कि redux-observable: मेरे लिए यह सामान्य मुहावरेदार Rx के साथ मौलिक रूप से असंगत है। आरएक्स में, हम ऐसे ऑपरेटरों का उपयोग करते हैं .debounceTime()
जो बहस करने के लिए आवश्यक तर्क को एनकैप्सुलेट करते हैं, लेकिन इसका मतलब है कि अगर हम इसका एक संस्करण बनाना चाहते हैं जो वास्तव में डिबॉन्सेसिंग नहीं करता है और इसके बजाय इरादे के साथ कार्य ऑब्जेक्ट्स का उत्सर्जन करता है, तो आप अब खो चुके हैं। Rx की शक्ति क्योंकि आप अभी चेन ऑपरेटर नहीं बना सकते हैं क्योंकि वे उस कार्य ऑब्जेक्ट पर काम करेंगे, ऑपरेशन का वास्तविक परिणाम नहीं। यह वास्तव में मुश्किल से समझाने के लिए है। दृष्टिकोणों की असंगति को समझने के लिए फिर से आरएक्स की भारी समझ की आवश्यकता होती है। यदि आप वास्तव में ऐसा कुछ चाहते हैं, तो Redux-cycles देखेंजो चक्र का उपयोग करता है। जेएस और ज्यादातर उन लक्ष्यों को है। मुझे लगता है कि इसे मेरे स्वाद के लिए बहुत अधिक समारोह की आवश्यकता है, लेकिन मैं आपको इसे एक स्पिन देने के लिए प्रोत्साहित करता हूं अगर यह आपकी रुचि रखता है।
जैसा कि थोरबेन ने उल्लेख किया है, मैं यह स्वीकार करने से नहीं कतराती हूं कि रेडक्स-गाथा वर्तमान में (10/13/16) रेडक्स के लिए जटिल साइड इफेक्ट प्रबंधन में स्पष्ट नेता है। यह पहले शुरू किया गया था और इसमें अधिक मजबूत समुदाय है। तो ब्लॉक पर नए बच्चे के ऊपर वास्तविक मानक का उपयोग करने के लिए बहुत आकर्षण है। मुझे लगता है कि यह कहना सुरक्षित है कि क्या आप बिना पूर्व ज्ञान के उपयोग करते हैं, आप कुछ भ्रम में हैं। हम दोनों काफी उन्नत अवधारणाओं का उपयोग करते हैं जो एक बार "प्राप्त" करने के बाद, जटिल साइड इफेक्ट प्रबंधन को बहुत आसान बना देता है, लेकिन तब तक कई ठोकरें खाता है।
सबसे महत्वपूर्ण सलाह जो मैं दे सकता हूं, वह इन पुस्तकालयों में से किसी में भी लाने की जरूरत नहीं है इससे पहले कि आप उन्हें ज़रूरत है। यदि आप केवल सरल अजाक्स कॉल कर रहे हैं, तो आपको शायद उनकी आवश्यकता नहीं है। redux-thunk सीखना सरल है और मूल बातें के लिए पर्याप्त प्रदान करता है - लेकिन जितना अधिक जटिल async उतना ही कठिन (या असंभव) यह redux-thunk के लिए हो जाता है। लेकिन कई मायनों में redux-observable / saga के लिए यह सबसे अधिक जटिल है जो async है। एक ही परियोजना में दूसरों (redux-observable / saga) में से एक के साथ redux-thunk का उपयोग करने में बहुत योग्यता है! अपने सामान्य साधारण सामान के लिए redux-thunk और फिर जटिल सामान के लिए केवल redux-observable / saga का उपयोग करना। यह उत्पादक बने रहने का एक शानदार तरीका है, इसलिए आप उन चीजों के लिए redux-observable / saga से नहीं लड़ रहे हैं जो redux-thunk के साथ तुच्छ होगी।