मैं भाटा और Redux के बीच विशिष्ट अंतर पर ध्यान केंद्रित कर एक और उत्तर लिखना चाहते थे:
यह लिंक है जिसे यह बारे में बात करती अधिक बड़े पैमाने पर है। @ मिजामो इस बात के मूल में जाता है कि क्यों वे अलग-अलग चीजों के रूप में पैदा हुए हैं और यदि आपके पास संदर्भ है तो एक बहुत अच्छा सारांश है, लेकिन मैं इस सवाल पर आया कि विशेष रूप से विकास परिप्रेक्ष्य से दोनों के बीच का अंतर जानने के लिए। यह देखकर कि मैं अभी कैसे गया और सभी चीजें पढ़ता हूं, मैं एक जवाब लिखना चाहता था। मैं इस कोड को और कोड उदाहरणों के साथ अपडेट कर दूंगा।
फ्लक्स (त्वरित अवलोकन)
इससे पहले कि हम इस में जाते हैं, मुझे लगता है कि एक बात है कि हम मन आगे बढ़ने में रखना चाहिए वर्तमान फ्लक्स के बारे में सोच रहा है और कैसे यह वर्तमान में कई घटक या कई अलग अलग के साथ एक आवेदन स्केलिंग हैंडल राज्यों के टुकड़े जिन्हें प्रबंधित करने की आवश्यकता है। यह एक बहुत अच्छा talk at React NYC: Scaling Flux है जो समस्या में जाता है और जिस समाधान पर वे पहुंचते हैं वह बहुत दूर नहीं है जो रेफ्लक्स और रेडक्स आपको करने की अनुमति देता है लेकिन संक्षेप में एक बड़ा सवाल है "जब हमारे पास घटक होते हैं तो हम क्या करते हैं क्या कुछ साझा राज्य है कि उन्हें सभी को ध्यान में रखना होगा? हम इसे कैसे संभालें और स्केल करें? "आखिरकार एक जवाब है कि इनमें से कई ढांचे पर आते हैं, हमें वैश्विक स्थिति के इस विचार की आवश्यकता है। अनिवार्य रूप से, दोनों ढांचे इस प्राप्त करने के लिए कुछ समान अवधारणाओं को पेश करते हैं जिन्हें हम नीचे जायेंगे।
क्योंकि मैं फ्लक्स की तुलना संदर्भित करने के लिए की आवश्यकता होगी, मैं सिर्फ नीचे चित्र के साथ एक quick overview way Flux works दिखाना चाहते हैं:
भाटा
भाटा में, वहाँ कोई डिस्पैचर है, और व्यू घटक सीधे कार्यों के माध्यम से घटकों के माध्यम से संवाद करते हैं।
+---------+ +--------+ +-----------------+
¦ Actions ¦------>¦ Stores ¦------>¦ View Components ¦
+---------+ +--------+ +-----------------+
^ ¦
+--------------------------------------+
फ़्लक्स से खुद को अलग करने के तरीके के संदर्भ में, बहुत अधिक नहीं है। आप अभी भी अपने स्वयं के कार्यों को बनाते हैं और अपना खुद का स्टोर बनाते हैं, और आपके पास अभी भी आपके स्टोर कार्यवाही सुनते हैं। मेरा मानना है कि सबसे बड़ा अंतर यह है कि व्यू घटक एक प्रेषक के माध्यम से सीधे स्टोर पर कार्रवाई सबमिट करने के लिए, घटक के पास एक स्टोर संपत्ति होती है जो React.Component
के बजाय Reflux.Component
से विस्तार करने से आता है ताकि इसका सीधे मार्ग हो सके एक दुकान में हुक। यानी इस उदाहरण
class MyComponent extends Reflux.Component
{
constructor(props)
{
super(props);
this.state = {}; // our store will add its own state to the component's
this.store = StatusStore; // <- just assign the store class itself
}
render()
{
var flag = this.state.flag; // <- flag is mixed in from the StatusStore
return <div>User is {flag}</div>
}
}
आप एक से अधिक दुकानों में हुक करने की क्षमता है (वहाँ एक प्रोप मैं stores
जो मामले में एक सरणी और क्षमता संपादित mapStoreToState
साथ भाटा भी जहाजों लेता है कहा जाता है विश्वास है आप कैसे विशेष रूप से नियंत्रित करने के लिए चाहता था है भंडार घटकों के लिए राज्य के ऊपर से गुजरती।
स्वाभाविक रूप से, क्योंकि आप एक घटक का उपयोग कर रहे हैं कि के साथ, तो आप शायद उनके documentation on Reflux Component और घटकों कैसे ठीक करने के लिए इसे ध्यान में रखते
अंतिम बात मैं हूँ पढ़ना चाहिए भाटा जहाजों नोट ऊपर है मैं उल्लेख करता हूँ डी बड़ी समस्या वैश्विक स्थिति थी और यह कैसे संबोधित करता है। रेफ्लक्स में Reflux.GlobalState
है जिसका योगदान तब तक किया जा सकता है जब तक आप अपने स्टोर पर आईडी सेट करते हैं। ऊपर दिया गया लिंक इसमें बहुत अधिक जानकारी देता है लेकिन इसके साथ, आप उन्हें Reflux.GlobalState.[StoreID].[property]
के माध्यम से एक्सेस कर सकते हैं, जहां StoreID
वह आईडी है जिसे आप स्टोर असाइन करते हैं और property
वह राज्य का वास्तविक टुकड़ा है जिसे आप एक्सेस करना चाहते हैं।
Redux
Redux में और स्वयं का बहुत कुछ बदल जाता है और यह भी प्रेषकों के विचार को मारता है। इससे पहले कि मैं वास्तव में गहराई से जाऊं, मैं अपने दस्तावेज़ों में उल्लेख किए गए three principles को हाइलाइट करना चाहता हूं।
- सच्चाई का एकल स्रोत
- राज्य केवल पढ़ने के लिए है
- परिवर्तन शुद्ध कार्यों
Redux में साथ किया जाता है, वहाँ वास्तव में केवल एक वैश्विक राज्य तुम्हारे साथ और कहा कि निपटने के लिए है आपके आवेदन के लिए वैश्विक स्थिति है (बड़ी समस्या को संबोधित करना)। जबकि आपके पास अभी भी कार्य और दुकान हैं, स्टोर्स स्वयं वैश्विक राज्य के पेड़ में अपने राज्य का ट्रैक रखने के लिए ज़िम्मेदार हैं, जिससे आप राज्य के पेड़ में बदलाव करने के लिए कार्यों को प्रेषित कर सकते हैं और आपको राज्य तक पहुंचने की इजाजत दे सकते हैं। आप अभी भी श्रोताओं को इन स्टोरों पर subscribe
के माध्यम से डाल सकते हैं।
इसका एक बड़ा प्रेरणा पहले दो सिद्धांतों में जाता है।फ्लक्स या यहां तक कि रेफ्लक्स में, यदि आप यह सुनिश्चित करना चाहते हैं कि राज्य को कुछ भी नहीं बदल रहा था, जब आप इसे नहीं चाहते थे (क्योंकि तकनीकी रूप से आप जब चाहें स्टोर में राज्य तक पहुंच सकते हैं और बदल सकते हैं), तो आप ImmutableJS जैसी चीज़ों पर निर्भर होंगे सुनिश्चित करें कि आप गलती से राज्य को म्यूट नहीं कर रहे थे। दूसरी ओर रेडक्स इसे बनाता है ताकि आप स्टोर/चयनकर्ताओं के माध्यम से केवल राज्य तक पहुंच सकें और केवल प्रेषण कार्यों (तीसरे सिद्धांत) के माध्यम से परिवर्तन कर सकें।
नोट करने के लिए एक दिलचस्प बात यह है कि रेफ्लक्स और फ्लक्स में ऐसी गतिविधियां थीं जहां स्टोर में आप सुनेंगे और निर्धारित करेंगे कि राज्य में क्या परिवर्तन होता है, रेडक्स में स्टोर बस आपके द्वारा इच्छित पेलोड के साथ एक संदेश भेजते हैं और फिर यह निर्धारित करने के लिए एक विशाल स्विच स्टेटमेंट है कि इसे राज्य के पेड़ के साथ क्या करना चाहिए - यही वह है जिसे वे रेड्यूसर के रूप में संदर्भित करते हैं। यह फ्लोर के reduce
के स्टोरों में से कोई अलग नहीं है, लेकिन रेडक्स इस अवधारणा को अपनी खुद की चीज़ के रूप में निकालता है और आपका वैश्विक राज्य पेड़ rootReducer
(रेडक्स जहाजों के लिए combineReducers
पर एक अच्छा फ़ंक्शन के साथ जाता है और rootReducer
) बनाता है। इसके बारे में सोचने का एक अच्छा तरीका यह है कि आप विशाल राज्य के पेड़ में बदलाव भेजते हैं और फिर जो भी परिवर्तन आप चाहते हैं, वह आपके इच्छित अंतिम राज्य को कम या संघनित हो जाता है। यह वास्तव में प्रभावित करता है कि रेडक्स कितनी चीजें सेट करता है, इसलिए यह बताता है कि कैसे पुन: प्रस्तुत करना है (मान लीजिए कि आप रेडक्स के साथ रेडक्स का उपयोग कर रहे हैं)।
Redux के data flow लिंक मैं उपर्युक्त में के बारे में वास्तव में अच्छी तरह बात की, लेकिन वहाँ भी एक बहुत अच्छी इंफ़ोग्राफ़िक मैं
तो कोर मतभेद संलग्न है वास्तव में
- है रेडक्स राज्य प्रबंधन के लिए एक पूरी तरह से अलग दृष्टिकोण है - यह इस विचार को गले लगाता है कि एक वैश्विक राज्य है और अनिवार्य रूप से यदि आप परिवर्तन करना चाहते हैं, तो यह होना चाहिए एक बहुत ही विशिष्ट तरीके से (आप कैसे नियंत्रित करते हैं कि किस घटक के पास आपके पास निर्भर है)।
- भाटा वास्तव में घटकों फ्लक्स मूल के बारे में गया था (मुझे लगता है कि करने के लिए भाटा क्या फ्लक्स किया जाना चाहिए था है चाहते हैं) क्या बहुत ज्यादा बदलने के लिए बिना एकाधिक स्टोर उपयोग करने की क्षमता दे रही है समर्थन करने के लिए कोशिश करता है।
- Redux वास्तव में करने का तरीका बदल राज्य वृक्ष में कामयाब रहे और भंडार अलग जिम्मेदारियों दे रहा है, और कैसे राज्य सूचना घटकों के लिए नीचे मैप किया गया है बदल जाता है, जबकि भाटा बस बीच आदमी बाहर rips ताकि आप अपने घटकों का उपयोग कर सकते हैं जो कुछ भी स्टोर उन्हें अधिक आसानी से करने की आवश्यकता है।
उम्मीद है कि इससे उनके बीच मूल मतभेदों की अधिक जानकारी मिलती है।
डुप्लिकेट क्यों है ??? मैं फेसबुक और रेडक्स में वेनिला प्रवाह के अंतर को नहीं जानना चाहता, मैं रिफ्लक्स (https://github.com/reflux/refluxjs) और रेडक्स (https://github.com/reactjs) के मूल अंतर को जानना चाहता हूं/redux) कि दोनों फ्लक्स आर्किटेक्चर पर बनाया गया है। –