मैं फ्लक्स पहले और Redux बाद में एक बहुत लंबे समय के लिए उपयोग कर रहा है, और मैं उनकी तरह कर , और मैं उनके लाभ देखते हैं, लेकिन एक सवाल मेरे मन में पॉपिंग रहता है:हम फ्लक्स/रेडक्स आर्किटेक्चर में कार्रवाइयों और reducers क्यों decouple?
क्यों हम दसगुणा करना क्रियाओं और reducers और कॉल के बीच अतिरिक्त संकेत जोड़ें जो राज्य (कार्रवाई) और राज्य (reducer) को बदलने के वास्तविक तरीके को बदलने के इरादे को व्यक्त करेगा, इस तरह से स्थिर या रनटाइम गारंटी और त्रुटि प्रदान करना अधिक कठिन है जाँच? राज्यों को संशोधित करने वाले तरीकों या कार्यों का उपयोग क्यों न करें?
तरीके या समारोह, स्थिर guaranties (टाइपप्रति या प्रवाह का उपयोग) और रनटाइम guaranties (विधि/समारोह नहीं मिला, आदि) प्रदान करेगा, जबकि एक कार्रवाई नहीं संभाला सब (या तो स्थिर या क्रम), तो आप 'में कोई त्रुटियों को बढ़ा देंगे आपको सिर्फ यह देखना होगा कि अपेक्षित व्यवहार नहीं हो रहा है।
- यह बहुत ही आसान है इसके बारे में
- Think घटक के राज्य इंटरफ़ेस प्रतिक्रिया के रूप में (setState, this.state), बिना:
मुझे इसे थोड़ा बेहतर उदाहरण देना हमारी सैद्धांतिक राज्य कंटेनर (टीएससी) के साथ करते हैं प्रतिपादन भाग।
तो, केवल एक चीज आप की जरूरत अपने घटकों के एक फिर से प्रस्तुत करना है जब हमारे टीएससी परिवर्तन में राज्य और संभावना है कि राज्य है, जो हमारे मामले में सादे तरीके कि राज्य को संशोधित कि हो जाएगा बदलने के लिए गति प्रदान करने के लिए है : fetchData
, setError
, setLoading
, आदि
क्या मुझे लगता है कि कार्रवाई और reducers कोड के गतिशील या स्थिर प्रेषण की एक decoupling हैं, इसलिए बजाय myStateContainer.doSomethingAndUpdateState(...)
आप actions.doSomethingAndUpdateState(...)
फोन पर कॉल करने की है, और आप पूरे प्रवाह करते है/redux मशीनरी उस कार्रवाई को राज्य के वास्तविक संशोधन के लिए जोड़ती है। यह पूरी बात केवल नियमित जावास्क्रिप्ट नियंत्रण प्रवाह का उपयोग करने के बजाय, अधिक जटिल कार्रवाइयों को संभालने के लिए थंक्स, सागा और अन्य मिडलवेयर की आवश्यकता को भी लाती है। कार्य प्रकारों - - कार्रवाई पेलोड - - कार्रवाई निर्माता कार्य (तर्क) के इंटरफेस के आकार :
मुख्य समस्या यह है कि इस decoupling सामान का एक बहुत लिखने के लिए आवश्यक है कि आप सिर्फ इतना है कि decoupling प्राप्त करने के लिए है अपने राज्य - कैसे आप अपने राज्य को अद्यतन
हमारे सैद्धांतिक राज्य कंटेनर (टीएससी) के लिए इस की तुलना करें: - अपने तरीकों के इंटरफेस - अपने राज्य के आकार - कैसे आप अपने राज्य को अद्यतन
तो मैं यहाँ क्या याद कर रहा हूँ? इस decoupling के क्या फायदे हैं?
यह बहुत ही इस अन्य सवाल के समान है: Redux actions/reducers vs. directly setting state
और क्यों उस प्रश्न का सबसे मतदान जवाब उत्तर नहीं मिलता है मुझे समझाती हूँ या तो मेरी या मूल प्रश्न: - क्रिया/कम करने वाली आप प्रश्न पूछ जाने कौन और कैसे? यह हमारे टीएससी के साथ किया जा सकता है, यह सिर्फ एक कार्यान्वयन विस्तार है और उसके पास कार्यों/reducers खुद के साथ कुछ भी नहीं है। - क्रियाएं/Reducers आपको अपने राज्य के साथ समय पर वापस जाने देते हैं: फिर यह राज्य कंटेनर के कार्यान्वयन विवरण का मामला है और हमारे टीएससी के साथ प्राप्त किया जा सकता है। - आदि: राज्य परिवर्तन आदेश, मिडलवेयर, और जो कुछ भी वर्तमान में कार्यों/reducers के साथ हासिल किया जाता है हमारे टीएससी के साथ हासिल किया जा सकता है, यह सिर्फ इसके कार्यान्वयन का मामला है।
बहुत बहुत धन्यवाद! फ़्रैन
आप टीएससी में भी लेनदेन के रूप में राज्य परिवर्तनों का इलाज कर सकते हैं, सोचें कि 'सेटस्टेट (पुरानास्टेट => न्यूस्टेट)', जिसे लेनदेन भी माना जा सकता है। मेरी परिकल्पना यह है कि 'सेटस्टेट' की कॉल को ट्रैक करना ट्रैकिंग कार्यों को ट्रैक करने जैसा ही है (वास्तव में, 'this.setState' वास्तव में संदर्भ' से जुड़े फ़ंक्शन को प्रेषित कर रहा है, इसलिए समानता गहरा है)। फिर, डेटा प्रवाह अभी भी एक दिशा में है: विधियां एकमात्र चीज हैं जो राज्य को बदल सकती हैं, और एक राज्य बदल दिया जा रहा है, फिर से एक रेंडर ट्रिगर करेगा, जो कि एक तरफ प्रवाह है। – franleplant
महत्वपूर्ण बात यह है कि मेरी परिकल्पना और शायद मेरा प्रश्न यह भी है कि, अगर आपको एक तरफ डेटा प्रवाह, स्थैतिक प्रकार की जांच, लेनदेन संबंधी राज्य परिवर्तन, बिना किसी कार्रवाई के किए गए कार्यों और reducers की आवश्यकता के बिना, इसके बारे में क्या बुरा बात है ? – franleplant
यह कम स्केलेबल है और एक और कठोर वास्तुकला की ओर जाता है, क्योंकि क्रियाएं उनके प्रभावों से कसकर बाध्य हो जाती हैं, जिससे अधिक कठिन प्रतिक्रिया मिलती है। हैंडलरों से किए गए कार्यों को डीकॉप्लिंग करने से आर्किटेक्चर अधिक लचीला हो सकता है, जो बदलते आवश्यकताओं (फ्लो का मूल उपयोग केस) के साथ बड़े ऐप्स विकसित करते समय महत्वपूर्ण है। उदाहरण के लिए, फ़्लो का उपयोग करते समय, कार्रवाई करने से पहले राज्य के पूर्व मौजूद हिस्सों पर प्रभाव पड़ता है। लेकिन इसके अलावा, कोई समस्या नहीं, जैसा कि मोबएक्स के अस्तित्व से प्रदर्शित होता है, जो लगभग बिल्कुल ठीक करता है। –