2016-02-12 14 views
6

में मॉडल विशिष्ट व्यावसायिक तर्क कहां रखा जाए, मैं यह समझने के लिए संघर्ष कर रहा हूं कि मुझे रेडक्स/रिएक्ट ऐप में कुछ कार्यक्षमता कहां रखनी चाहिए।रेडक्स ऐप

मेरे परिदृश्य इस प्रकार, मेरे वर्तमान अनुप्रयोग में मैं कई जे एस कक्षाओं कि आसपास के विभिन्न json वस्तुओं लपेट और डेटा निश्चित मानदंडों के आधार पर बदल के विभिन्न भागों पाने के लिए विधियां उपलब्ध करा है। उदाहरण के लिए, उनके पास एक GetProperty ('name') विधि है जो वर्तमान होस्ट वातावरण को देखती है और उस होस्ट के लिए सही उप-संपत्ति मान देता है।

Redux ऐप में इस तर्क को लागू करने के लिए सही जगह कहां होगी? आदर्श रूप से मैं इसे एक मॉडल में encapsulate करना चाहता हूं ताकि अन्य डेवलपर्स को हर दृश्य में इसे फिर से लागू करने की आवश्यकता न हो।

चाहेंगे अपने डेटा लोड हो रहा है कार्रवाई में किसी कक्षा के json डेटा बदलने और भंडारण कि कम करने के माध्यम से दुकान में सही हो सकता है? यदि ऐसा है तो मैं कैसे सुनिश्चित कर सकता हूं कि राज्य कक्षा में एक सेटटर विधि के माध्यम से उत्परिवर्तित नहीं होता है?

कोई भी मदद/राय की सराहना की।

+0

संभावित डुप्लिकेट [रेडक्स रेड्यूसर और एक्शन क्रिएटर के बीच तर्क को कैसे विभाजित करें?] (Http://stackoverflow.com/questions/34098125/how-to-divide-the-logic-between-redux-reducers-and प्रतिक्रिया-रचनाकार) –

उत्तर

0

जेसन डेटा को मेरे डेटा लोडिंग कार्रवाई में एक वर्ग में बदलना और reducer के माध्यम से स्टोर में संग्रहीत करना सही होगा?

मुझे लगता है कि आपका कथन बहुत करीब है, चलो कुछ विचार जोड़ें।

कम करने सही जगह किसी भी तरह के तर्क को संभालने के लिए है, क्योंकि यह केवल एक नए राज्य वस्तु वापस जाने के लिए है नहीं है।

आपकी कार्रवाई रचनाकारों, क्रियाओं को संचालित करने इस प्रकार यदि कुछ एपीआई ऑपरेशन या डेटा हेरफेर की आवश्यकता है अपेक्षा की जाती है, कार्रवाई निर्माता सबसे अच्छी जगह इस पर काम करने के लिए है।

जब आप रेडक्स थंक मिडलवेयर का उपयोग करते हैं तो आप अधिक कार्यात्मक क्रिया निर्माता लागू कर सकते हैं।

अगर मैं सही ढंग से समझ, आप पहले से ही तर्क अपने js फ़ाइलों में अपने JSON डेटा को संभालने के लिए है। यदि आप चाहें तो मैं इन फ़ाइलों को अपने स्वामित्व lib या API के रूप में मानूंगा। मेरे एक्शन क्रिएटर में शामिल करें और JSON से सही डेटा या रूपांतरित डेटा प्राप्त करने के लिए अपने जेएस lib/API में उपयुक्त विधि को कॉल करें।

तब मैं यह डेटा लेता हूं और इसे reducer में पास करता हूं और डेटा को राज्य में डाल देता हूं।

इस तरह से आप पहले से ही विद्यमान js फ़ाइलों का पुन: उपयोग कर सकते हैं, साथ ही आप टीम के भीतर कार्रवाई रचनाकारों साझा कर सकते हैं।

यदि ऐसा है तो मैं कैसे सुनिश्चित कर सकता हूं कि राज्य कक्षा में विधि के माध्यम से उत्परिवर्तित नहीं हो सकता है?

आपको अपने डेटा में सभी डेटा नहीं डालना चाहिए। अपने जेएस फाइलों में तर्क रखें और अपने हैंडलर फ़ंक्शंस को अपने एक्शन क्रिएटर में कार्रवाइयों पर मैप करें। तो अगर हेरफेर की जरूरत है तो सही कार्रवाई करें। केवल उस डेटा को रखें जो आपके राज्य ऑब्जेक्ट में ऐप स्थिति से प्रासंगिक है।

+0

प्रतिक्रिया के लिए धन्यवाद! मैं अभी भी उलझन में हूं कि मुझे अपने राज्य से एक विशेष मूल्य पढ़ने के लिए एक एक्शन निर्माता और एक क्रिया क्यों बनाना होगा। ऐसा लगता है कि मुझे केवल एक मूल्य पढ़ने के लिए इतना काम करना है। यह बात मैं Redux समारोह कॉन्फ़िग (JSON) { this.data = json } Config.prototype.getValue = समारोह (कुंजी) { वर env = इस में प्राप्त करने के लिए कोशिश कर रहा हूँ के प्रकार है .getEnvironment(); वापसी _getDeepValueForEnv (कुंजी, env); } Config.prototype.getEnvironment = function() { वापसी _findCurrentEnvironment(); } – monobyte

10

यदि आप दृश्य के लिए मॉडल डेटा बदलना चाहते हैं, तो इसे reducers के बाहर करना उचित है। आम तौर पर हम आपको उन कार्यों को निर्यात करने की सलाह देते हैं जो वर्तमान state (और संभावित रूप से अन्य तर्क, जैसे environment आपके मामले में) लेते हैं और जो कुछ भी दृश्य की आवश्यकता है, उसे वापस लौटने की सलाह देते हैं, उदाहरण के लिए, getVisibleTodos(state)।इस तरह के कार्यों को समान रूप से बनाया जा सकता है कि आप रेड्यूसर कैसे बनाते हैं, और वास्तव में, हम उन्हें रेड्यूसर के साथ परिभाषित करने की सलाह देते हैं ताकि जब आप अपना राज्य आकार बदलते हैं तो उन्हें बदलना न भूलें।

shopping cart example इस दृष्टिकोण को दर्शाता है। हालांकि, प्रत्येक राज्य परिवर्तन पर सभी व्युत्पन्न राज्य का पुनर्मूल्यांकन अक्षम है। यही कारण है कि हम Reselect जैसी लाइब्रेरी का उपयोग करने की अनुशंसा करते हैं जो आपको चयनकर्ता कार्यों को अन्य चयनकर्ता कार्यों की निर्भरताओं के रूप में लिखने देता है, और मानों को याद करता है ताकि उन्हें आवश्यकता के बिना पुन: गणना नहीं किया जा सके।

कृपया इस दृष्टिकोण के बारे में अधिक जानकारी के लिए Computing Derived Data देखें।

+0

मुझे कभी-कभी पता चलता है कि मैं राज्य अपडेट से पहले सत्यापन व्यवसाय तर्क में चयनकर्ताओं से व्युत्पन्न डेटा का उपयोग करना चाहता हूं। आप उन सत्यापनों की अनुशंसा करते हैं जहां से चयनकर्ता डेटा चाहते हैं? –

0

योग-अप डेटा तर्क देता है: mapDispatchToProps से

  1. कॉल कार्रवाई
  2. API कॉल> वेब सेवा (JSON पेलोड) से डेटा
  3. रूपांतरण प्राप्त या में कुछ डेटा हेरफेर लागू एक सहायक/जो भी ...
  4. कार्रवाई
  5. समर्पित reducer
  6. के माध्यम से अपने स्टोर में डेटा जोड़ें
  7. mapStateToProps

लूप बंद है।

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