2016-11-09 14 views
8

मैंने हाल ही में प्रतिक्रिया सीखना शुरू कर दिया है और मुझे तुरंत कार्यों और राज्य से भरे हुए ब्लोएटेड पैरेंट घटक की समस्या का सामना करना पड़ा। सबसे पहले मैंने फ्लक्स को देखा और फिर मैंने रेडक्स को देखा लेकिन दोनों वास्तव में समाधानों की तरह लग रहे थे।रेडक्स वैकल्पिक

क्यों कुछ इस तरह से नहीं किया है मैं सोच रहा हूँ:

//EventPropagator.js 
let EventPropagator = { 
    registerListener(listenerObject){ 
     if (this.listeners == null) 
      this.listeners = [] 
     this.listeners.push(listenerObject) 
    }, 
    fireEvent(eventObject){ 
     let listenerList = this.listeners.filter(function(listener){ 
      return listener.eventType === eventObject.eventType 
     }) 
     listenerList.forEach((listener) => { 
      listener.callback(eventObject.payload) 
     }) 
    } 
} 
export default EventPropagator 

का उपयोग करें: घटकों बस registerListener और fireEvent:

//main.js 
import EventPropagator from './events/EventPropagator' 

EventPropagator.registerListener({ 
    "eventType": "carry_coconut", 
    "callback": (payload) => { 
     // actually carry coconut 
     this.setState({"swallow_type": payload.swallow}) 
     console.log(payload) 
    } 
}) 
EventPropagator.fireEvent({ 
    "eventType": "carry_coconut", 
    "payload": { "swallow": "african" } 
}) 

इस decoupling और राज्य कर सकता का एक बहुत की अनुमति होगी इस तरह के आयोजन के साथ आसानी से पारित किया जा सकता है। इस दृष्टिकोण के लिए डाउनसाइड्स क्या हैं?

+0

Jumpstate अच्छा https://github.com/jumpsuit/jumpstate लग रहा है। – imns

+0

यह दृष्टिकोण क्रॉस-घटक संचार के मुद्दे को हल करेगा, लेकिन आपको अभी भी 'राज्य' में स्थानीय रूप से प्रत्येक घटक डेटा को प्रबंधित करने की आवश्यकता होगी। कार्यों और reducers के अलावा, redux भी मदद करता है, तो आपको स्थानीय राज्य के बारे में सोचना नहीं है, और इसे (शायद कई) घटकों के बीच सिंक में कैसे रखना है। –

उत्तर

2

आप की कोशिश करनी चाहिए mobX

mobX एक राज्य प्रबंधन पुस्तकालय जो decorators का फायदा उठाया और अवांछित कोड को दूर करने में सफल रहा है। उदाहरण के लिए, मोबक्स में reducers की कोई अवधारणा नहीं है।

आशा है कि इससे मदद मिलती है!

+0

यह दिलचस्प लग रहा है लेकिन उपर्युक्त की तुलना में अभी भी बहुत अधिक सीखने की वक्र है और यह मुझे नहीं देखती है कि आप बहुत अधिक लाभ प्राप्त करते हैं ... हालांकि लिंक के लिए धन्यवाद, मैं इसे और अधिक विस्तार से देखूंगा! – jcuenod

1

एक घटना संचालित प्रणाली क्या है, इसलिए एक बच्चा घटक अपने भाई से बात कर सकता है लेकिन इसका मतलब यह नहीं है कि डेटा ईवेंट पेलोड के रूप में पारित किया जाना चाहिए। इससे किसी भी प्रशासन के लिए कोई शासन और दुःस्वप्न की व्यवस्था नहीं होगी जहां कई डेवलपर्स इस पर काम कर रहे हैं।

जब तक आप फ्लक्स-जैसे आर्किटेक्चर पैटर्न (इसे Google) का पालन करते हैं, तो आप वास्तव में घटना प्रणाली के साथ डेटा को पकड़ने के लिए केवल जावास्क्रिप्ट और जावास्क्रिप्ट ऑब्जेक्ट्स के साथ सफलतापूर्वक ऐसा कर सकते हैं।

डेटा को तीन अलग-अलग राज्यों में से एक माना जाना चाहिए। यह या तो

  1. मूल डेटा सर्वर
  2. तब्दील डेटा (मूल से बदल)
  3. स्टोर डेटा से खींच लिया है। जो मॉडल है जो यूआई आप तीन राज्यों के बीच डेटा के आंदोलन को संभालने और रूपांतरण को संभालने के लिए एक जावास्क्रिप्ट पुस्तकालय लिखते हैं तो आप एक "दुकान आग करने के लिए घटना प्रणाली का उपयोग कर सकते

के लिए बाध्य है के रूप में कार्य है कि बदल दिया "घटना है कि घटक सुन सकते हैं और आत्मरक्षा कर सकते हैं।

1

रेडक्स प्रतिक्रिया की घोषणात्मक प्रोग्रामिंग शैली की निरंतरता है। घटकों के लिए अपने अनुप्रयोग तर्क को मैप करने का एक आसान तरीका Backbone.React.Component जैसे कुछ का उपयोग करना है, लेकिन रेडक्स का उपयोग करके, आप सभी टूलिंग & मध्य-वेयर का उपयोग करने देंगे। आपके ऐप्स में अनिश्चितकालीन संक्रमण भी बहुत आसान बनाते हैं। अब, मैं मानता हूं कि आपको वैसे भी प्राप्त करने के लिए बहुत सारे वायरिंग & बॉयलरप्लेट की आवश्यकता है।

आप redux का उपयोग करना चाहते हैं, तो आप कुछ पर की तरह redux-auto

Redux-ऑटो दे सकता है: Redux करना आसान हो गया (एक प्लग के साथ और खेलने के दृष्टिकोण)

की स्थापना में बॉयलरप्लेट कोड निकालना एक स्टोर & क्रियाएँ। क्यूं कर?यह उपयोगिता आपको उस समय के एक हिस्से में रुडक्स के साथ उठने और चलाने की अनुमति देती है!

आप देख सकते हैं अब एक redux-auto: helloworld project

+1

शायद एक अस्वीकरण जोड़ें कि यह आपकी परियोजना है। – jcuenod