हम अपने लगातार राज्य को अलग-अलग फाइलों में अपने राज्य का प्रबंधन करने की बजाय, हमारे लगातार राज्य को डेटाबेस में क्यों स्थानांतरित करते हैं?
क्योंकि यह हमारे समग्र आवेदन स्थिति को क्वेरी, डीबग और क्रमबद्ध करने में बहुत आसान बनाता है।
रेडक्स Elm नामक एक भाषा से प्रेरित था, जो एक मॉडल के उपयोग को भी बढ़ावा देता है। एल्म के निर्माता के पास एक और औचित्य है कि यह अनुप्रयोगों के लिए एक महत्वपूर्ण गुणवत्ता क्यों है।
सत्य का एक स्रोत है। पारंपरिक दृष्टिकोण आपको विभिन्न अलग-अलग राज्यों के घटकों के बीच राज्य को सिंक्रनाइज़ करने के लिए एक सभ्य मात्रा में कस्टम और त्रुटि प्रवण कोड लिखने के लिए मजबूर करता है। (इस विजेट की स्थिति को एप्लिकेशन स्थिति के साथ समन्वयित करने की आवश्यकता है, जिसे किसी अन्य विजेट, आदि के साथ समन्वयित करने की आवश्यकता है) अपने सभी राज्य को एक ही स्थान पर रखकर, आप बग की एक पूरी कक्षा को खत्म करते हैं जिसमें दो घटक मिलते हैं असंगत राज्यों में। हम यह भी सोचते हैं कि आप बहुत कम कोड लिखना समाप्त कर देंगे। यह अब तक एल्म में हमारा अवलोकन रहा है।
मैं इस अवधारणा पाया बहुत आसान जानने के लिए और ClojureScript के Re-frame से निपटने और डेविड Nolen के videos on Om Next देख जबकि समझने के लिए। परियोजना के लिए Re-frame README भी एक महान शिक्षण संसाधन है।
यहां मेरे कुछ निजी अधिग्रहण हैं कि क्यों वैश्विक राज्य एक अधिक सुरुचिपूर्ण समाधान है।
सरल अवयव
एक आम परिदृश्य है कि कई स्टेटफुल घटक आधारित अनुप्रयोगों में उठता है, राज्य है कि एक और घटक में रहती है संशोधित करने के लिए एक की जरूरत है।
उदाहरण के लिए
, एक NameTag
घटक में कोई संपादित करें बटन पर क्लिक एक संपादक जो उपयोगकर्ता कुछ डेटा जो एक Profile
घटक (NameTag
की एक माता पिता) के राज्य में रहती है को संशोधित करने की अनुमति देता है आप खुल जाएगा। इस समस्या को हल करने का तरीका हैडलर कॉलबैक को पास करना है, जो तब घटक पेड़ को वापस प्रसारित करता है। इस पैटर्न के परिणामस्वरूप प्रतिक्रिया अनुप्रयोगों के मौजूदा एक तरफ डेटा प्रवाह के भीतर भ्रमित उप-डेटा प्रवाह होता है।
वैश्विक स्थिति के साथ, घटक केवल उस स्थिति को प्रेषित करते हैं जो उस स्थिति के अपडेट को ट्रिगर करता है। प्रासंगिक घटकों को उपयोगकर्ता को वापस भेजने के लिए दोनों घटकों और कार्यों को पैरामीटर किया जा सकता है (उदा। उपयोगकर्ता का आईडी क्या है जिसका नाम मुझे संपादित करना चाहिए)।
आपको इस बारे में बहुत कुछ नहीं सोचना है कि आप राज्य में परिवर्तनों को कैसे संवाद करने जा रहे हैं, क्योंकि आप जानते हैं कि राज्य कहां है, और कार्य उन परिवर्तनों को भेजने के लिए पूर्वनिर्धारित तंत्र हैं।
शुद्ध कार्य
आपके आवेदन राज्य एक ही स्थान में रहता है, घटक है कि प्रस्तुत करना यह शुद्ध कार्यों कि एक तर्क के रूप में राज्य ले जा सकता है। वे सिर्फ डेटा देखते हैं, और एक ऐसा दृश्य वापस करते हैं जो अद्यतन करने के लिए क्रियाएं प्रेषित कर सकता है।
ये फ़ंक्शन संदर्भित रूप से पारदर्शी हैं, जिसका अर्थ यह है कि इनपुट के किसी भी सेट के लिए, हमेशा सटीक एक ही आउटपुट होता है। यह परीक्षण के लिए आदर्श है और आप उन घटकों के साथ समाप्त होते हैं जो परीक्षण के लिए सरल हैं।
क्रमबद्धता
एक पारंपरिक में स्टेटफुल घटकों के साथ आवेदन प्रतिक्रिया, serializing पूरा आवेदन राज्य एक बुरा सपना हो सकता है। इसमें डेटा घटक में उन्हें इकट्ठा करने और इसे एन्कोड करने से पहले, प्रत्येक घटक पेड़ को पार करने और प्रत्येक घटक से राज्य मूल्य निकालने में शामिल होगा।
एक धारावाहिक स्थिति वाले घटकों को पुन: फुलाए जाने का मतलब एक समान प्रक्रिया होगी, सिवाय इसके कि आपको यह भी पता लगाना होगा कि किस प्रकार के घटक जिम्मेदार थे जिसके लिए डेटा, ताकि आप घटक पेड़ को सटीक रूप से पुन: बना सकें। इसका मतलब यह भी होगा कि आपके राज्य में घटक प्रकारों के बारे में अतिरिक्त जानकारी संग्रहीत करना।
वैश्विक स्थिति के साथ, आप बस इसे ठीक से एन्कोड और डीकोड कर सकते हैं।
पूर्ववत करें/फिर
पूर्ववत लागू/वैश्विक राज्य के साथ फिर से करना करने के लिए, यदि आप इसके बजाय पिछले एक जगह जब यह अद्यतन करता है की तुलना में एक सूची में राज्यों स्टोर करने के लिए, की जरूरत है। एक इंडेक्स सूचक आपके वर्तमान स्थिति को नियंत्रित कर सकता है।
राज्य के घटकों के साथ, इस तंत्र को लागू करने के लिए प्रत्येक घटक की आवश्यकता होगी। न केवल यह बहुत अधिक काम है, बल्कि यह आपके आवेदन में बग के लिए एक और बिंदु भी पेश करता है। जैसा कि वे कहते हैं, सबसे अच्छा कोड कोई कोड नहीं है।
कार्रवाई प्लेबैक
Redux में (और सामान्य रूप में फ्लक्स पैटर्न) हम कार्रवाई खेला गया है कि का ट्रैक रख सकते तो ठीक उसी राज्य का निर्माण करने के लिए एक और संदर्भ में वापस उन्हें खेलने,।
यदि आप घटक स्थानीय स्थिति पेश करते हैं, तो आप इसे अलविदा कह सकते हैं। स्थानीय राज्य के अपडेट डीओएम इवेंट हैंडलर, नेटवर्क अनुरोध, एसिंक्रोनस ऑपरेशंस (और बहुत कुछ) से आ सकते हैं। इन परिचालनों को क्रमबद्ध नहीं किया जा सकता है, जिसका अर्थ है कि उन्हें या तो वापस नहीं खेला जा सकता है।
मुझे लगता है कि उनके [गिटूब पर इस पर प्रासंगिक चर्चा] है (https://github.com/reactjs/redux/issues/1385)? आधिकारिक तौर पर उत्तर नहीं दिया गया है लेकिन इसकी चर्चा की जा रही है - यह सुनिश्चित नहीं है कि वह वास्तव में मदद करता है या नहीं। – aug
क्या होता है यदि आप अपने ऐप को फिर से डिजाइन करते हैं और वैश्विक स्थिति को वैश्विक नहीं होना चाहिए? – Theo
@aug: पोस्ट करने के लिए धन्यवाद। वहाँ जानकारी की एक संपत्ति। यह मेरे प्रश्न के उत्तर देने में मदद करता है "क्या मैं रेडक्स स्टोर्स का उपयोग कर सकता हूं और राज्य प्रतिक्रिया दे सकता हूं?" – Skitterm