प्रतिक्रिया संदर्भ बनाम प्रतिक्रिया Redux, मुझे हर एक का उपयोग कब करना चाहिए? [बन्द है]


186

प्रतिक्रिया 16.3.0 जारी की गई थी और संदर्भ एपीआई अब एक प्रायोगिक विशेषता नहीं है। डैन अब्रामोव (रेडक्स के निर्माता) ने इस बारे में यहां एक अच्छी टिप्पणी लिखी थी, लेकिन यह 2 साल था जब कॉन्टेक्स्ट अभी भी एक प्रायोगिक विशेषता थी।

मेरा सवाल है, आपकी राय / अनुभव में मुझे रिएक्ट रिडक्स पर प्रतिक्रिया संदर्भ का उपयोग कब करना चाहिए और इसके विपरीत?


यदि आप Redux और React Context API की तुलना कर रहे हैं, तो यह इसलिए है क्योंकि आप केवल घटकों के बीच के अंतर को ही रखना चाहते हैं। duixNpm पैकेज की जाँच करें । यह केवल कॉलबैक के साथ एक सरल राज्य प्रबंधक है, वास्तव में लागू करना आसान है। बस स्पष्ट होना: मैं निर्माता हूँ।
बड़ौदा नोएल

जवाबों:


208

के रूप में प्रसंग अब एक प्रायोगिक विशेषता नहीं है और आप सीधे अपने आवेदन में प्रसंग का उपयोग कर सकते हैं और डेटा को गहराई से नेस्टेड घटकों को पास करने के लिए महान होने जा रहा है जो इसके लिए डिज़ाइन किया गया था।

जैसा कि मार्क एरिकसन ने अपने ब्लॉग में लिखा है :

यदि आप केवल Redux का उपयोग कर रहे हैं, तो प्रॉपर से गुजरने से बचने के लिए, संदर्भ Redux की जगह ले सकता है - लेकिन तब शायद आपको पहले स्थान पर Redux की आवश्यकता नहीं थी।

संदर्भ भी आपको ऐसा कुछ नहीं देता है Redux DevTools, जो आपके राज्य के अपडेट का पता लगाने की क्षमता, middlewareकेंद्रीकृत एप्लिकेशन लॉजिक और Redux सक्षम करने वाली अन्य शक्तिशाली क्षमताओं को जोड़ने के लिए है ।

Reduxबहुत अधिक शक्तिशाली है और बड़ी संख्या में सुविधाएँ Context Apiप्रदान करता है जो प्रदान नहीं करता है, जैसा कि @danAbramov ने उल्लेख किया है

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

इसके Redux तक वास्तव में नवीनतम संदर्भ एपीआई के साथ पालन करने के लिए इसके कार्यान्वयन को अद्यतन करें

नवीनतम संदर्भ API का उपयोग उन अनुप्रयोगों के लिए किया जा सकता है जहां आप घटक के बीच डेटा पास करने के लिए बस Redux का उपयोग कर रहे होंगे, हालांकि अनुप्रयोग जो केंद्रीकृत डेटा का उपयोग करते हैं और एक्शन क्रिएटर्स में एपीआई अनुरोध का उपयोग करते हैं redux-thunkया redux-sagaअभी भी Redux की आवश्यकता होगी। इसके अलावा Redux में अन्य पुस्तकालय जुड़े हुए हैं, redux-persistजो आपको लोकलस्टोरेज में स्टोर डेटा को बचाने और रिफ्रेश पर रीहाइड्रेट करने की अनुमति देते हैं , जो कि संदर्भ एपीआई अभी भी समर्थन नहीं करता है।

जैसा कि @dan_abramov ने अपने ब्लॉग में उल्लेख किया है कि आपको Redux की आवश्यकता नहीं हो सकती है , उस Redux में उपयोगी अनुप्रयोग है

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

इन कई एप्लिकेशनों के साथ इसकी बहुत जल्द ही यह कहा जाता है कि Redux को नए संदर्भ API द्वारा बदल दिया जाएगा


ठीक है, लेकिन पुन: प्रयोज्य के बारे में क्या? संदर्भ पूरी तरह से पुन: प्रयोज्य हैं, एक बार redux + thunk, और विशेष रूप से redux + saga मुश्किल से हैं।
यूरी हैओवाई

4
@ डाग्गेट हमें जिस चीज़ को समझने की ज़रूरत है वह है रिड्यूस संदर्भ नहीं है, यह संदर्भ के शीर्ष पर बनाया गया है, जिस स्टोर को आपने संदर्भ से नीचे पारित किया है, आप पुन: प्रयोज्यता के बारे में भी विस्तार से बता सकते हैं
शुभम खत्री

यहां तक ​​कि पुन: प्रयोज्य कंटेनर के साथ साइड इफेक्ट्स जैसी बुनियादी चीज का विकास भी एक बुरा सपना बन जाता है। Redux एप्लिकेशन स्तर तक तंग है, और आप कह सकते हैं, यह अभी भी पुन: प्रयोज्य है आदि आदि, लेकिन पुन: प्रयोज्य कहने का मेरा मतलब है कि पूरी तरह से पुन: प्रयोज्य है ... स्पाइक्स की कोई स्पैगेटी के साथ, एक अलग पैकेज के रूप में बनाया गया है, और आवेदन करने के लिए स्वतंत्र रूप से पुन: उपयोग किया जा सकता है। ।
यूरी होओवी

@YuriiHaiovyi मैं आपके सवालों से सहमत हूं। यह जवाब मूल रूप से संकलित संस्करण है जो लिंक किए गए ब्लॉग पोस्ट कहता है। स्वयं के दृष्टिकोण को साझा करने के बारे में कुछ भी नहीं, जैसे मैं केवल संदर्भ का उपयोग कर रहा था, और फिर मैं अटक गया, और यह महसूस किया कि यह कुछ एक्स, वाई, जेड कारणों के लिए एक बुरा विकल्प है और फिर Redux, Mobx में स्थानांतरित हो गया जिसने इसे हल किया .. या रिवर्स उदाहरण के लिए कहानी । मुख्य रूप से लोग यह पूछ रहे हैं या यह देखने के लिए खोज कर रहे हैं कि क्या कुछ कहानियाँ बुरी या अच्छी हैं, जो तब पाठकों को सोचने और एक परिकलित निर्णय लेने में मदद कर सकती हैं ... तो मेरा प्रश्न कि आप कौन सा रास्ता चुनते हैं?
अरूप रक्षित

4
Redux का कौन सा हिस्सा पुन: प्रयोज्य नहीं है? आप Redux, चयनकर्ताओं, कार्यों और एक्शन क्रिएटर्स को आसानी से redux (प्रतिक्रिया, यहां तक ​​कि कोणीय) के साथ किसी अन्य एप्लिकेशन में पुन: उपयोग कर सकते हैं।
दाविद मोलनार

85

यदि आप Redux का उपयोग केवल गहराई से नेस्टेड घटकों के नीचे गुजरने से बचने के लिए कर रहे हैं , तो आप Redux को ContextAPI से बदल सकते हैं । यह इस उपयोग के मामले के लिए बिल्कुल अभिप्रेत है।

दूसरी ओर, यदि आप हर चीज के लिए Redux का उपयोग कर रहे हैं (एक प्रेडिक्टेबल स्टेट कंटेनर होने के कारण, अपने ऐप्लिकेशन के लॉजिक को अपने कंपोनेंट्स के बाहर संभालते हुए, अपने एप्लिकेशन के स्टेट को सेंट्रलाइज करते हुए, Redux DevTools का उपयोग करके ट्रैक करें कि कब, कहां, क्यों और कैसे आपके एप्लिकेशन का स्टेट्स बदल दिया, या Redux Form , Redux Saga , Redux Undo , Redux Persist , Redux Logger , आदि…) जैसे प्लगइन्स का उपयोग करके , फिर आपके लिए Redux को छोड़ने का कोई कारण नहीं है। Contextएपीआई इनमें से कोई भी प्रदान नहीं करता है।

और मैं व्यक्तिगत रूप से मानता हूं कि Redux DevTools एक्सटेंशन एक अद्भुत, कम करके आंका गया डिबगिंग टूल है, जो Redux का उपयोग करते रहने के लिए अपने आप को सही ठहराता है।

कुछ संदर्भ:


12

मैं API कॉल करने (Axios का उपयोग करके) के लिए redux-thunk के साथ redux का उपयोग करना पसंद करता हूं और reducers को प्रतिक्रिया भेज रहा हूं। यह साफ और समझने में आसान है।

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

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

लेकिन अगर आप आज सिर्फ Redux सीख रहे हैं, और आपने इसे कहीं भी इस्तेमाल नहीं किया है, तो यह Context API को एक शॉट देने के लायक है और आपके कस्टम कॉन्टेक्स्ट API कोड के साथ रिएक्ट-रिडक्स को बदल देगा। हो सकता है, यह बहुत साफ है।

व्यक्तिगत रूप से, यह परिचित का सवाल है। एक दूसरे को चुनने का कोई स्पष्ट कारण नहीं है क्योंकि वे समकक्ष हैं। और आंतरिक रूप से, प्रतिक्रिया-रिडक्स संदर्भ मार्ग का उपयोग करता है।


10

मेरे लिए Redux का उपयोग करने के एकमात्र कारण हैं:

  • आप एक वैश्विक राज्य वस्तु चाहते हैं (विभिन्न कारणों से, जैसे डिबगैबिलिटी, दृढ़ता ...)
  • आपका ऐप बड़ा है, या कई डेवलपर्स के लिए होना चाहिए: ऐसे मामले में आपको शायद अप्रत्यक्ष स्तर (यानी एक ईवेंट सिस्टम) की आवश्यकता है: आप ईवेंट (पूर्व में) फायर करते हैं और फिर जिन लोगों को आप नहीं जानते हैं संगठन वास्तव में उनकी बात सुन सकता है

आपको शायद अपने पूरे ऐप के लिए इनडायरेक्शन के स्तर की आवश्यकता नहीं है, इसलिए यह शैलियों को मिलाने और स्थानीय स्थिति / संदर्भ का उपयोग करने और एक ही समय में Redux दोनों का उपयोग करने के लिए ठीक है।


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

से: Redux का उपयोग कब करें?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.