2015-05-22 4 views
5

मैं एक समस्या प्रतिक्रिया जो मुझे यकीन है कि के रूप में यह अभी मुझे लगता है के रूप में मुश्किल नहीं हो सकता है कर रहा हूँ के साथ समुद्री मील में अपने आप को बांधने कर रहा हूँ।फ्लक्स: स्टोर के लिए एक्शन प्रतीक्षा कैसे करें?

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

समस्या मेरे पास है

कैसे कार्यों और दुकानों के बीच निर्भरता का प्रबंधन करने के लिए है। उदाहरण के लिए, जब सभी सार्वजनिक दस्तावेजों को आग लगने की कार्रवाई होती है, तो उसे LoggedInSessionStore से अपना यूआरएल प्राप्त करने की आवश्यकता होती है। लेकिन वह स्टोर अभी तक पॉप्युलेट नहीं हो सकता है; तो कार्रवाई को पिछली कार्रवाई (लॉगिन सत्र लाने) तक पूरा नहीं होना चाहिए।

तो, मैं एक ऐसी कार्रवाई है कि एक दुकान में संग्रहीत किया जाता है एक यूआरएल का उपयोग कर सर्वर डेटा लाने कर सकते हैं। यह सुनिश्चित करने का स्वीकार्य तरीका क्या है कि उस दुकान को तब तक आग नहीं लगाया जा सकता जब तक कि उस स्टोर को पॉप्युलेट नहीं किया जाता है?

उत्तर

3

टीएल; डीआर अपने यूआरएल को अपने स्टोर में स्टोर न करें। अपने कार्यों को एपीआई कॉल को संभालने दें।

सामान्य तौर पर जब फ्लक्स का उपयोग कर अपने कार्यों अपने स्टोर के बारे में पता नहीं करना चाहिए। एक फ्लक्स आवेदन में डाटा एक ही दिशा में प्रवाह करने के लिए है:

Components --> Actions --> Dispatcher --> Stores --> Components 

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

बिंदु जा रहा है: क्रिया भंडार

पर निर्भर नहीं करना चाहिए क्या मैं सुझाव है कि आप कार्रवाई में अपने सभी एपीआई तर्क के लिए कदम है। इसमें आपके एपीआई के लिए यूआरएल शामिल हैं। यह फ्लक्स अनुप्रयोगों में एक काफी आम पैटर्न है:

  1. एक घटक componentDidMount पर एक fetch कार्रवाई को ट्रिगर करता है। लोडिंग स्पिनर प्रदर्शित करता है क्योंकि इसमें अभी तक डेटा को प्रस्तुत करने की आवश्यकता नहीं है।
  2. लाने कार्रवाई सर्वर से डेटा लाने के लिए एक AJAX कॉल में आता है।
  3. डेटा सर्वर से वापस आता है, कार्रवाई यह एक पेलोड
  4. एक दुकान प्राप्त किए गए डेटा
  5. घटक देखता है कि दुकान अद्यतन किया गया है के आधार पर पेलोड को देखता है और अपनी आंतरिक स्थिति सेट के रूप में, डिस्पैच और तदनुसार अपने राज्य को अद्यतन करता है। यह केवल एक लोडिंग स्पिनर के बजाय ऐप प्रस्तुत करने का कारण बनता है।

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

यह धागा भी उपयोगी हो सकता है: Should flux stores, or actions (or both) touch external services?

+2

आपके उत्तर @ian के लिए धन्यवाद। मेरा कोड ठीक उसी तरह संरचित है जैसा आप अनुशंसा करते हैं, और मुझे लगता है कि यह मेरी समस्या का हिस्सा है। समस्या का दूसरा हिस्सा यह है कि मैं हैटओएएस सिद्धांतों का पालन करने की कोशिश कर रहा हूं: प्रत्येक एक्शन द्वारा आवश्यक यूआरएल पहले एपीआई कॉल के परिणामस्वरूप सर्वर से आता है। इसलिए पहले को छोड़कर प्रत्येक कार्रवाई को यूआरएल के पिछले पेलोड में सर्वर से वापस आने के लिए इंतजार करना होगा (और फिर संभवतः स्टोर में सहेजा जा सकता है)। तो मेरा सवाल है: प्रतिक्रिया/प्रवाह हेटोआस के साथ असंगत है? – kevinrutherford

+0

यह एक अच्छा सवाल है, लेकिन दुर्भाग्य से मैं आपकी मदद नहीं कर सकता। मैंने फ्लोट एप्लिकेशन में हैटओएएस सिद्धांतों को लागू करने की कोशिश कभी नहीं की है – ian

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