2016-09-07 22 views
9

जैसा कि मैं रेडक्स को लागू करने में आगे बढ़ता हूं + एक जटिल जटिल ऐप में प्रतिक्रिया करता हूं जो एक पृष्ठ को लोड करने के लिए कई एपीआई अनुरोधों पर निर्भर करता है, मुझे यह तय करने में परेशानी हो रही है कि क्या यह बेहतर है कि यह एक कंटेनर घटक है पृष्ठ जो सभी एसिंक सामग्री को संभालता है और गुंबद घटकों को बना देता है, बनाम कई कंटेनर घटकों के साथ जो खुद को केवल आवश्यक डेटा के साथ ही चिंता करते हैं, साथ ही डेटा की आवश्यकता होती है। मैं आगे और पीछे इन दो पैटर्न के बीच चला गया और पाया कि वे एक पेशेवरों/विपक्ष है कि है:प्रतिक्रिया रेडक्स: अधिक कंटेनर बनाम। कम कंटेनर

  • समर्थक:

    अगर मैं शीर्ष पर एक ही कंटेनर घटक डाल सभी isFetching रंगमंच की सामग्री और fetchSomeDependency() कार्यों को एक ही स्थान पर संभाला जा सकता है।

  • con: जो नकारात्मक पक्ष वास्तव में परेशान है, वह है कि मुझे अपने आप को कई घटकों के माध्यम से प्रोप और कॉलबैक आगे बढ़ाना पड़ता है, और पेड़ के बीच में कुछ घटक इस तक बंधे होते हैं।

यहाँ समस्या का एक दृश्य उदाहरण है कि पता चलता है रिश्तों की आवश्यकता रंगमंच की सामग्री के लिहाज से:

<MyContainer 
    data={this.props.data} 
    isFetchingData={this.props.isFetchingData} 
    fetchData={this.props.fetchData} 
> 
    {!isFetchingData && 
    <MyModal 
     someData={props.data} 
     fetchData={props.fetchData} 
     > 
     <MyModalContent 
     someData={props.data} 
     fetchData={props.fetchData} 
     > 
      <SomethingThatDependsOnData someData={props.someData} /> 
      <SomeButtonThatFetchesData onClick={props.fetchData} /> 
     </MyModalContent> 
     </MyModal> 
    } 
</MyContainer> 

आप देख सकते हैं, <MyModal /> और <MyModalContent /> अब रंगमंच की सामग्री के साथ कुछ नहीं करना है कि के साथ संबंध होने की जरूरत है यह, एक मॉडल के रूप में देखकर फिर से उपयोग किया जा सकता है और केवल एक मॉडल के स्टाइलिस्ट गुणों से चिंतित होना चाहिए।

पहले उपरोक्त प्रतीत होता था लेकिन एक बार जब मैं 100+ घटकों तक पहुंच गया तो यह सब बहुत उलझन में महसूस हुआ, और मुझे इन शीर्ष-स्तरीय कंटेनर घटकों की जटिलता को मेरी पसंद के लिए बहुत अधिक पाया गया, क्योंकि उनमें से अधिकतर (ऐप में मैं काम कर रहा हूं) 3+ एपीआई अनुरोधों से प्रतिक्रियाओं पर निर्भर करता हूं।

  • समर्थक: पूरी तरह से रंगमंच की सामग्री को अग्रेषित करने की जरूरत को हटा

    तब मैं कई कंटेनर की कोशिश करने का फैसला किया। यह अभी भी कुछ मामलों में ऐसा करने के लिए समझ में आता है, लेकिन यह बहुत अधिक लचीला है।

  • प्रो: रीफैक्टर करने के लिए रास्ता आसान है। मैं आश्चर्यचकित हूं कि मैं कुछ भी तोड़ने के बिना घटकों को कैसे बदल सकता हूं और घटकों को दोबारा बदल सकता हूं, जबकि अन्य पैटर्न में चीजें बहुत टूट गईं।
  • प्रो: प्रत्येक कंटेनर घटक की जटिलता बहुत कम है। । किसी भी घटक है कि async सामान पर निर्भर करता है हमेशा अपने आप में isFetching राज्य को संभालने के लिए की आवश्यकता होगी: मेरे mapStateToProps और mapDispatchToProps घटक उस में
  • चोर है के प्रयोजन के लिए और अधिक विशिष्ट है। यह जटिलता को जोड़ता है जो उस पैटर्न में जरूरी नहीं है जहां इसे एक कंटेनर घटक में संभाला जाता है।

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

मैं अगर किसी को भी एक तरह से दोनों विपक्ष से बचने के लिए मिल गया है जानना चाहते हैं, और यदि ऐसा है तो, "अंगूठे का नियम" क्या है आप इस से बचने के लिए का पालन करें?

धन्यवाद!

उत्तर

0

तरह से मैं हमेशा यह आपके जड़/ऐप्स घटक के अलावा किसी अन्य तार्किक घटकों ग्रुप में शीर्ष सबसे घटक पर अपने कंटेनर है देखा है।

तो हम है कि परिणाम और मान घटक heiarchy ऐसे

<Root> <- setup the app 
    <App> 
    <Search/> <- search input 
    <Results/> <- results table 
    </App> 
</Root> 

है मैं Search और Results redux बारे में पता कंटेनर होगा की सुविधा देता है एक साधारण खोज एप्लिकेशन है। क्योंकि प्रतिक्रिया घटक संगत माना जाता है। आपके पास अन्य घटक या पृष्ठ हो सकते हैं जिन्हें Results या Search प्रदर्शित करने की आवश्यकता हो। यदि आप डेटा लाने और रूट या ऐप घटक को जागरूकता संग्रहित करते हैं, तो यह घटक एक-दूसरे/ऐप पर निर्भर हो जाते हैं। जब आपको परिवर्तनों को लागू करना होता है तो यह लाइन को कठिन बना देता है, अब आपको उन सभी स्थानों को बदलना होगा जो उनका उपयोग करते हैं।

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

0

मैं भी एक ही कंटेनर का दृष्टिकोण का उपयोग करने पर विचार नहीं होगा। यह रेडक्स के सभी फायदों को पूरी तरह से अस्वीकार करता है। राज्य प्रबंधन प्रणाली रखने की कोई आवश्यकता नहीं है यदि आपका सभी राज्य एक ही स्थान पर है और आपके सभी कॉलबैक एक ही स्थान पर हैं (मूल घटक)।

मुझे लगता है कि वहाँ एक पतली रेखा चलने के लिए, हालांकि है। मैं एक ऐप बना रहा हूं जहां मैं लगभग 5 सप्ताह (अंशकालिक) के लिए रहा हूं और यह अभी 3000 लाइनों तक है। इसमें घोंसले के 3 स्तर हैं, एक रूटिंग तंत्र जिसे मैंने स्वयं लागू किया है, और ऐसे घटकों जो घोंसले के घोंसले के 10+ स्तर हैं जिन्हें राज्य को संशोधित करने की आवश्यकता है। मैं मूल रूप से प्रत्येक बड़ी स्क्रीन के लिए एक redux कंटेनर है और यह अद्भुत काम करता है।

हालांकि, अगर मैं अपने "क्लाइंट" दृश्य पर क्लिक करता हूं, तो मुझे एक क्लाइंट सूची मिलती है जो ठीक है, क्योंकि मेरे क्लाइंट व्यू रेडक्स कंटेनर के अंदर है और ग्राहकों को प्रोप के रूप में पास किया जाता है। हालांकि, जब मैं एक ग्राहक पर क्लिक करता हूं, तो मैं व्यक्तिगत ग्राहक की प्रोफ़ाइल के लिए एक और रेडक्स कंटेनर करने में वास्तव में संकोच करता हूं क्योंकि यह गुजरने वाले प्रोपों का केवल एक अतिरिक्त स्तर है। ऐसा लगता है कि अनुप्रयोग के कार्यक्षेत्र के आधार पर आप अतीत redux कंटेनर 1-2 स्तर तक रंगमंच की सामग्री पहुंचाना चाहेंगे और अगर यह है कि तुलना में किसी भी अधिक है, तो सिर्फ एक और redux कंटेनर बनाने के। फिर फिर, यदि यह एक और अधिक जटिल ऐप है, तो कभी-कभी रेडक्स कंटेनर का उपयोग करके मिश्रण और कुछ अन्य बार उनका उपयोग नहीं किया जा सकता है ताकि रखरखाव के लिए और भी बदतर हो। संक्षेप में, मेरी राय जहां भी संभव हो रेडक्स कंटेनर को कम करने की कोशिश कर रही है लेकिन निश्चित रूप से जटिल प्रोप चेन की कीमत पर नहीं, क्योंकि यह शुरू करने के लिए रेडक्स का उपयोग करने का मुख्य बिंदु है।

+0

एक पठनीय समाधान पोस्ट करें:

यह लेख देखें। – Sachith

2

रेडक्स लेखक दान अब्रामोव सुझाव देते हैं कि जब आप उन्हें आवश्यकता हो तो कंटेनर घटकों का उपयोग करें। यही है, एक बार जब आप बीटीडब्ल्यू ऊपर और नीचे तारों के बहुत अधिक प्रोपस प्राप्त हो जाते हैं। घटक कंटेनरों का उपयोग करने का समय है।

वह इसे "रिफैक्टरिंग की चल रही प्रक्रिया" कहते हैं। https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0

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