2015-05-20 5 views
5

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

मैंने देखा है कि यह प्रतिक्रिया componentDidMount में वास्तविक AJAX क्वेरी करने का सुझाव दिया गया है, और उस क्रिया को AJAX के परिणामस्वरूप गुजरने के लिए एक क्रिया को ट्रिगर करता है। वह डेटा स्टोर के राज्य में और आपके शुरुआती राज्य के रूप में दृश्य में वापस आ जाएगा।

मैं भी देखा है यह कार्रवाई ही है, जो घबराना के अंदर ajax करने के लिए सुझाव दिया बहुत अच्छी तरह से उनके async के साथ समर्थन समर्थन का इंतजार करने लगता है। मुझे लगता है कि इस परिदृश्य में आप कुछ शुरुआती राज्य कार्रवाई शुरू कर देंगे?

उत्तर

5

आप सर्वर घटक componentDidMount में सीधे एक Ajax अनुरोध का उपयोग करने से राज्य को लोड नहीं किया जाना चाहिए। इसका कारण यह है कि फ्लक्स का उद्देश्य घटकों से राज्य लाने/प्रबंधन के नट-किरकिरा विवरण को छिपाना है। फ्लक्स कार्यान्वयन आपके लिए ऐसा करना चाहिए।

अलग फ्लक्स कार्यान्वयन में बदलाव का एक बहुत होते हैं, और वहाँ वास्तव में कोई सही या गलत तरीका है।

क्रिया

जब यह क्रिया करने के लिए आता है और क्या आप उनके लिए का उपयोग के बारे में सोचना एक बात नहीं है। एक क्रिया ऐसा कुछ माना जाता है जो आपके आवेदन स्थिति को बदल देता है। आप अपने कार्यों पर लागू लेनदेन के समूह के रूप में संयुक्त सभी कार्यों के बारे में सोच सकते हैं। एक क्रिया आपके आवेदन डेटा को एक राज्य से अगले राज्य में स्थानांतरित करती है।

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

कुछ फ्लक्स कार्यान्वयन कार्यों मिश्रण जाता है (जैसे "यह कार्यसूची मद अद्यतन") और सवाल (जैसे "मेरे साथ आईडी 2 कार्य करने आइटम दें")। यह सुविधाजनक हो सकता है लेकिन यह एक क्रिया की परिभाषा को धुंधला करता है। और एक सवाल राज्य को विचलित नहीं करता है, यह सिर्फ इससे पढ़ता है।

प्रश्न के बजाय, पर स्टोर तरीके के रूप में लागू किया जाना चाहिए TodoStore.getItem(id) की तरह (घबराना के पक्ष में लगता है)।

उत्तर

तो अपने सवाल का जवाब देने: यहां तक ​​कि अगर प्रारंभिक अवस्था हो रही async है और एक कार्य के बाद से घबराना उनके लिए अच्छा async समर्थन हासिल है के लिए बिल्कुल उपयुक्त की तरह लगता है, मैं में प्रारंभिक अवस्था लोड होगा स्टोर (शायद एक साधारण अजाक्स अनुरोध का उपयोग कर और फिर स्टोर पर setState पर कॉल करें)। ऐसा इसलिए क्योंकि यह स्टोर है जो राज्य का मालिक है और उसे यह जानना चाहिए कि इसे कैसे संभालना है। एक घटक फिर सभी वस्तुओं के लिए स्टोर से पूछता है (या तो Flummox के FluxComponent या fluxMixin का उपयोग कर)। यह पहले प्रस्तुत करने के लिए एक खाली सूची देगा, लेकिन जैसे ही अजाक्स अनुरोध Store.setState() पर कॉल पूरा करता है, पूरी सूची के साथ फिर से प्रस्तुत करना ट्रिगर करेगा।

स्मृति

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

तो उन मामलों के लिए, तो आप शायद बजाय IndexedDB या WebSQL में राज्य संग्रहीत करना चाहते हैं और एकीकृत करने के लिए है कि फ्लक्स कार्यान्वयन कि उम्मीद है कि यह एक तुल्यकालिक में स्मृति वस्तु होने के साथ कड़ी मेहनत हो जाता है।

यदि आप क्लाइंट पर फ्लमॉक्स या किसी अन्य फ्लक्स कार्यान्वयन का उपयोग करके अपने आवेदन पर अधिक आवेदन की आवश्यकता नहीं है, लेकिन यह स्मृति में रखने के लिए कुछ है (कोई इरादा नहीं है)।

+0

सूचनात्मक प्रतिक्रिया के लिए धन्यवाद! मेरे लिए आंख खोलने का हिस्सा वह जगह है जहां आप कार्रवाई या दुकान में कुछ जाना चाहिए या नहीं, यह निर्धारित करने में सहायता के लिए आप कार्रवाई और प्रश्न के बीच एक अंतर खींचते हैं। यह अंगूठे का एक बड़ा नियम है जिसका मैं पालन करूंगा। – Ryan

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