2015-12-24 12 views
7

मैं एक jQuery अनुप्रयोग में पहली बार रेडक्स का उपयोग कर रहा हूं और मैंने छोटे अवलोकन कार्यान्वयन को बनाया है। अवलोकन, राज्य वस्तु के कई गुणों पर परिवर्तनों का जवाब दे रहे हैं, जब राज्य स्वयं बदलता है तो डोम में परिवर्तन कर रहा है। यदि मेरे अवलोकन योग्य कॉलबैक को अपने कार्य को पूरा करने के लिए 2 संपत्ति मानों की आवश्यकता है, तो मैं दोनों मानों का पालन करूंगा और फिर UI को अपडेट करने के लिए उन मानों का उपयोग करूंगा। अवलोकन राज्य को छूते नहीं हैं। वे इसे कॉलबैक में देखने योग्य में प्रस्तुत करते हैं ताकि इसका उपयोग यूआई को राज्य के साथ अपडेट करने के लिए किया जा सके।Redux में getState का उपयोग एक विरोधी पैटर्न है?

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

store.getState का उपयोग कर रहा है जहां कभी मुझे इसे एक विरोधी पैटर्न माना जाता है? क्या उनके स्पष्ट उपयोग-मामले हैं जिन्हें मुझे store.getState का उपयोग करते समय टालना चाहिए?

उत्तर

4

जब आप store.getState() बहुत उदारतापूर्वक उपयोग करते हैं, तो आप वैश्विक स्थिति को यादृच्छिक घटकों तक पार करते हैं। आप अपने राज्य के घटकों और हिस्सों के बीच युग्मन शुरू करने का जोखिम चलाते हैं जिनके पास एक दूसरे के साथ कुछ भी नहीं है, जो विरोधी पैटर्न है। आपको केवल दो कारणों से getState पर कॉल करना चाहिए: ऐप की आरंभिक स्थिति लाने के लिए, और अपने स्टोर के लिए अद्यतन तर्क में- 0eकॉलबैक के अंदर।

जहां तक ​​आपके observables जाना, जैसे प्रतिक्रिया एक विशिष्ट घटक आधारित दृश्य परत में, केवल एक चीज आप वास्तव में एक redux अनुप्रयोग में निरीक्षण करने की आवश्यकता पूरा आवेदन राज्य एक पूरी के रूप में, इसके बारे में नहीं अलग-अलग हिस्सों है । पूरी तरह से राज्य में परिवर्तन शीर्ष स्तर के घटक से सदस्यता लेते हैं और नीचे घूमते हैं।

हालांकि चूंकि आप एक jquery अनुप्रयोग को दोबारा कर रहे हैं, मुझे लगता है कि आपके अवलोकन का उपयोग स्वीकार्य है। reselect नामक एक लाइब्रेरी है जिसे आप इस उद्देश्य के लिए उपयोग कर सकते हैं यदि आप अपना खुद का रोलिंग महसूस नहीं करते हैं। यह आपको वैश्विक राज्य के मनमानी हिस्सों से राज्य की गणना करने में मदद करता है और कुशल ज्ञापन प्रदान करता है, इसलिए उसी इनपुट को पुनः संयोजित नहीं किया जाता है।

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

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

+0

मैं कार्यों के जवाब में अपने राज्य को अद्यतन करने के लिए reducers का उपयोग कर रहा हूँ। राज्य के लिए केवल प्रतिक्रिया ही मेरे अवलोकनों को बदलती है डीओएम अपडेट करें। यह देखते हुए कि यह एक रिएक्ट ऐप नहीं है, अगर मैं देखने योग्य नहीं हूं तो मैं अपने यूआई को अपडेट करने के लिए और कैसे जानूंगा? –

+0

ठीक है, मैं आपकी समस्या देखता हूं। आपके यूआई में रेडक्स कंटेनर स्टेटस को जोड़ने से कुछ भी नहीं है। उस स्थिति में, मैं संभवतः राज्य के विशिष्ट टुकड़ों को प्रसारित करने के लिए एक ईवेंट एमिटर का उपयोग करता हूं (जब वे बदलते हैं) उन jQuery घटकों को प्रसारित करते हैं जिन्हें उनकी आवश्यकता होती है - हर बार जब आपके reducers राज्य के एक टुकड़े को बदलते हैं, तो घटक जो घटना पंजीकृत कर सकते हैं डीओएम में आवश्यक परिवर्तन। आप वैश्विक स्थिति को पार करने और घटक अलगाव में सुधार से बचेंगे। – Anchor

+0

जहां तक ​​आप गणना की गई राज्य के लिए अवलोकनों का उपयोग करते हैं, मुझे लगता है कि यह ठीक है। हालांकि, एक पुस्तकालय है जिसे [reselect] कहा जाता है (https: // github।com/rackt/reselect) की इस तरह के उपयोग-मामले के लिए अत्यधिक अनुशंसा की जाती है और इनपुट को याद दिलाती है। – Anchor

संबंधित मुद्दे