2016-01-23 15 views
7

मैं रेडक्स के राज्य के पेड़ में क्या रखना है, इस पर थोड़ा सा खो गया हूं।क्या डेटा को रेडक्स राज्य पेड़ में जाना चाहिए?

मैंने राज्य के वृक्षों में स्टोर करने के लिए दो विवादित बयान देखा।

  • React doc हमें बताते हैं कि केवल उपयोगकर्ता इनपुट राज्य पेड़ों में संग्रहित किया जाना चाहिए।

मूल सूची उत्पादों की रंगमंच की सामग्री के रूप में में पारित हो जाता है, तो कि राज्य नहीं है। खोज टेक्स्ट और चेकबॉक्स राज्य के रूप में बदलते हैं क्योंकि वे समय के साथ बदलते हैं और किसी भी चीज़ से गणना नहीं की जा सकती हैं। और अंत में, उत्पादों की फ़िल्टर की गई सूची राज्य नहीं है क्योंकि इसकी खोज टेक्स्ट और चेकबॉक्स के मूल्य के साथ उत्पादों की मूल सूची को संयोजित करके गणना की जा सकती है।

  • Redux doc हमें बताता है कि हम अक्सर संग्रहीत करना चाहिए यूआई राज्य और डेटा एक राज्य वृक्ष में:

हमारे कार्यसूची एप्लिकेशन के लिए, हम दो अलग बातें संग्रहीत करना चाहते हैं:

  • वर्तमान में चयनित दृश्यता फ़िल्टर;
  • टोडोस की वास्तविक सूची।

आपको अक्सर पता चलेगा कि आपको राज्य के पेड़ में कुछ डेटा, साथ ही कुछ यूआई स्टेट ** स्टोर करने की आवश्यकता है। यह ठीक है, लेकिन यूआई राज्य से डेटा को अलग रखने की कोशिश करें।

तो प्रतिक्रिया बताती है कि हमें डेटा स्टोर नहीं करना चाहिए (मैं टोडोस के डेटा के बारे में बात कर रहा हूं) और, मेरे लिए, रेडक्स विपरीत बताता है।

में मेरी क्योंकि दोनों प्रतिक्रिया मैं प्रतिक्रिया की ओर जाते हैं समझते हैं और Redux भंडारण के द्वारा एक यूआई राज्य की भविष्यवाणी करने के उद्देश्य:

  1. सब क्या नहीं की जा सकती (जैसे: सभी मानव आदानों) और

    • चेकबॉक्स मूल्य
    • इनपुट मूल्य
    • रेडियो मूल्य
    • : यूआई का हिस्सा हैं ...
  2. सभी न्यूनतम डेटा है कि एक प्रश्न का निर्माण और एपीआई/डेटाबेस है कि पूरा उपयोगकर्ता प्रोफ़ाइल वापस आ जाएगी, दोस्तों की सूची, जो कुछ भी करने के लिए इसे भेजने के लिए उपयोग हो सकता है ...:

    • उपयोगकर्ता आईडी
    • निर्माण दिनांकों लेकर
    • आइटम आईडी
    • ...

मुझे कि सभी डेटाबेस/एपीआई शामिल नहीं के लिए परिणाम है क्योंकि:

  • जो डेटा स्तर
  • पर दाएं (और शुद्ध reducers द्वारा गणना) क्वेरी भेजकर गणना की जा सकती है।

तो आपकी राय क्या है?

+0

यह बिल्कुल अस्पष्ट है कि आप वास्तव में क्या पूछ रहे हैं। लेकिन अगर आप एक सूची प्रस्तुत कर रहे हैं तो आप वस्तुओं की सरणी को रेडक्स स्टोर कर सकते हैं। वस्तुओं की सूची खाली हो जाएगी लेकिन फिर आप अपने एपीआई को कॉल कर सकते हैं और एपीआई से लौटाई गई सूची के साथ रेडक्स स्टेटस अपडेट कर सकते हैं। – Dylan

+0

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

+0

@DanielN ने मेरे उत्तर में कुछ नया स्पष्टीकरण जोड़ा। मैं देखता हूं कि रिएक्ट डॉक में वह कथन केवल उस उदाहरण के बारे में था। चूंकि घटक को प्रोप के माध्यम से पहले से ही अपना डेटा प्राप्त हुआ है, यही कारण है कि यह राज्य नहीं है, इसका मतलब यह नहीं है कि यह डेटा किसी अन्य घटक (रूट घटक) की स्थिति में नहीं है –

उत्तर

6

देखें घटक राज्य के बारे में दस्तावेज़ प्रतिक्रिया है, लेकिन एप्लीकेशन स्टेट के बारे में Redux प्रलेखन। तो, परिभाषाओं के बीच कोई संघर्ष नहीं है।

अगर हम बात के बारे में Redux - आप राज्य के बिना अपने सभी घटकों को बनाने (और प्रतिक्रिया-redux के connect समारोह की मदद से स्टेटफुल को राज्यविहीन जड़ घटक को बदलने)। यदि आपके पास सर्वर से बड़ी प्रतिक्रिया है और आप पेजिंग/फ़िल्टर के साथ अपना डेटा दिखाते हैं, तो आप अपने एप्लिकेशन स्टेटस को स्क्रीन पर जो देखते हैं उसके रूप में देख सकते हैं और रेडक्स स्टोर में सभी डेटा नहीं डाल सकते हैं, केवल आपको render (उदाहरण के लिए, 100) अंक दिखाने के लिए पंक्तियों और पंक्तियों की कुल संख्या दिखाने के लिए पंक्तियां)। इस के लिए कोई प्रतिबंध नहीं है। पूरा डेटा आप किसी अन्य स्थान पर डाल सकते हैं। उदाहरण के लिए, वेब-वर्कर में एक अन्य डेटा कंटेनर में (मैं वेब-वर्कर में पूर्ण अनुरोध करता हूं और वहां से केवल डेटा को प्रदर्शित करने के लिए आवश्यक अनुरोध करता हूं)।


जोड़ा गया के बाद प्रश्न संपादित:

उत्पादों की मूल सूची, रंगमंच की सामग्री के रूप में में पारित हो जाता है तो यह है कि राज्य नहीं है।

उस उदाहरण में, उत्पादों की सूची राज्य नहीं है - यह पहले से ही props में है। इसका मतलब है कि मूल घटकों में से एक को यह राज्य के रूप में है।

0

मुझे लगता है कि समस्या यह है कि मूल रूप से रेडक्स को वास्तव में कठिन धक्का दिया गया था, और कुछ लोग इतने शुद्ध थे, कि उन्होंने सबकुछ रेडक्स को अलग करने और हर बदलाव पर पूरे आवेदन को फिर से प्रस्तुत करने के लिए तर्क दिया। और फिर हम निर्माता के this response के साथ समाप्त हुए, जो वास्तव में केवल एक भ्रम जोड़ता था, क्योंकि रेडक्स था और अभी भी नए प्रतिक्रिया अनुप्रयोगों के लिए एक वास्तविक तथ्य है, और कई ट्यूटोरियल इसे मानते हैं।

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

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

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