2016-03-17 6 views
54

प्रोपटाइप और फ्लो समान चीजों को कवर करते हैं लेकिन विभिन्न दृष्टिकोणों का उपयोग कर रहे हैं। PropTypes आपको रनटाइम के दौरान चेतावनियां दे सकता है, जो सर्वर से आने वाले विकृत प्रतिक्रियाओं को तुरंत ढूंढने में सहायक हो सकता है। हालांकि, फ्लो भविष्य लगता है और जेनरिक जैसी अवधारणाओं के साथ एक बहुत ही लचीला समाधान है। Nuclide द्वारा प्रदान की गई स्वत: पूर्णता फ्लो के लिए एक बड़ा प्लस है।प्रतिक्रिया प्रोटीप्स बनाम प्रवाह

मेरा प्रश्न अब एक नया प्रोजेक्ट शुरू करते समय जाने का सबसे अच्छा तरीका है। या फ्लो और प्रोप टाइप्स दोनों का उपयोग करने के लिए यह एक अच्छा समाधान हो सकता है? दोनों का उपयोग करने में समस्या यह है कि आप बहुत सारे डुप्लिकेट कोड लिखते हैं। यह मैंने लिखा एक म्यूजिक प्लेयर अनुप्रयोग का एक उदाहरण है:

export const PlaylistPropType = PropTypes.shape({ 
    next: ItemPropTypes, 
    current: ItemPropTypes, 
    history: PropTypes.arrayOf(ItemPropTypes).isRequired 
}); 

export type Playlist = { 
    next: Item, 
    current: Item, 
    history: Array<Item> 
}; 

दोनों परिभाषाओं मूलतः एक ही जानकारी होती है और जब डेटा प्रकार बदल गया है, दोनों परिभाषाओं को अपडेट करने की जरूरत है।

मुझे यह babel plugin प्रोपटाइप में प्रकार की घोषणाओं को परिवर्तित करने के लिए मिला, जो एक समाधान हो सकता है।

+1

आप इस पोस्ट की कोशिश प्रवाह के साथ आरंभ करने के लिए करना चाहते हैं: http://www.robinwieruch.de/the-soundcloud-client-in -रेक्ट-रेडक्स-फ्लो/ –

+1

अनुभव से, प्रश्न में उल्लिखित प्लगइन का उपयोग करना बहुत अच्छा विचार नहीं है। यह सभी प्रकार के घटकों का समर्थन नहीं करता है, पूरी तरह से v0.39 के रूप में प्रतिक्रिया मूल के साथ टूटा हुआ है, और आमतौर पर बहुत नाजुक है। रेपो का मालिक इन मुद्दों का काफी जल्दी जवाब देने के लिए प्रयोग करता था, लेकिन ऐसा लगता है कि वह ब्याज खो गया है और इसे बनाए रखने के लिए अब पर भरोसा नहीं किया जा सकता है। – Tomty

+0

फ़्लो और टॉमब का उपयोग करके स्थिर और रनटाइम प्रकार की जांच के लिए tcomb [via] (https://github.com/gcanti/babel-plugin-tcomb) बैबेल प्लगइन आज़माएं। – comerc

उत्तर

20

टाइपिंग जांच के बहुत व्यापक क्षेत्र से संबंधित दोनों के अलावा, दोनों के बीच वास्तव में बहुत समानता नहीं है।

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

प्रोपैप्स एक मूल प्रकार का चेकर है जिसे प्रतिक्रिया पर रखा गया है। यह किसी दिए गए घटक को पारित होने वाले प्रोप के प्रकारों के अलावा कुछ भी नहीं देख सकता है।

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

यदि आप प्रोप प्रकारों की जांच करना चाहते हैं, तो अपने शेष कोडबेस को अधिक जटिल न करें और सरल विकल्प के साथ जाएं।

+10

हाँ, वे कैसे काम करते हैं इस मामले में वे बहुत अलग हैं। हालांकि, उनका उपयोग करने का उद्देश्य बहुत समान है, मुझे लगता है। लेकिन एक चीज जो आपने इंगित की है वह एक अच्छा बिंदु है: प्रवाह चलो आप अपने अधिक कोडबेस को कवर करते हैं, जबकि आप प्रोप टाइप्स का उपयोग करते समय प्रोप तक सीमित हैं। – danielbuechele

+0

उपयोग का उद्देश्य केवल इतना ही समान है यदि आप प्रो प्रकारों की जांच के लिए प्रवाह का उपयोग करते हैं। एक मूल रूप से एक भाषा है, दूसरा एक पुस्तकालय है। –

+0

पूरी तरह से @DanPrince से सहमत हैं। और मुझे नहीं लगता कि प्रोपटाइप के साथ सर्वर से विकृत प्रतिक्रियाओं की जांच करना एक अच्छा विचार है। यह बेहतर है यदि आपके पास मैन्युअल जांच है और आपका यूआई कंसोल में केवल चेतावनी फेंकने के बजाय ठीक से प्रतिक्रिया देता है (उदाहरण के लिए एक चेतावनी संदेश प्रदर्शित करता है)। –

45

इस प्रश्न पूछने के एक साल बाद, मैं इस समस्या के साथ अपने अनुभवों के बारे में एक अद्यतन देना चाहता था।

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

एक या दूसरी दिशा में स्वचालित कन्वर्टर्स वास्तव में बंद नहीं हुए थे। तो नई परियोजनाओं के लिए अब मैं वास्तव में प्रोपटाइप पर प्रवाह का उपयोग करने की सलाह दूंगा (यदि आप दो बार टाइपिंग नहीं करना चाहते हैं)।

+0

आप किस आईडीई का उपयोग करते हैं? Webstorm? –

+1

मैं विचार-प्रवाह प्रकार प्लगइन के साथ एटम का उपयोग कर रहा हूँ। – danielbuechele

3

केवल फ़्लो का उपयोग करके प्रोप के प्रकार की घोषणा करने का प्रयास करें। एक गलत प्रकार निर्दिष्ट करें, जैसे स्ट्रिंग के बजाय संख्या। आप देखेंगे कि यह कोड में फ़्लैग किया जाएगा जो आपके फ़्लो-जागरूक संपादक के भीतर घटक का उपयोग करता है। हालांकि, इससे कोई परीक्षण विफल नहीं होगा और आपका ऐप अभी भी काम करेगा।

अब गलत प्रकार के साथ प्रतिक्रिया प्रोप टाइप का उपयोग जोड़ें। यह परीक्षण विफल होने का कारण बनता है और ऐप चलाए जाने पर ब्राउज़र कंसोल में फ़्लैग किया जाएगा।

इस पर आधारित, ऐसा लगता है कि फ्लो का उपयोग होने के बावजूद, प्रोप टाइप को भी निर्दिष्ट किया जाना चाहिए।

+0

यह परीक्षण करता है कि परीक्षण कैसे किए जाते हैं, यदि आप जेस्ट के स्नैपशॉट परीक्षण का उपयोग करते हैं, तो परीक्षण अमान्य संपत्ति मानों के साथ विफल हो जाएंगे। –

+1

आपके आईडीई में त्रुटि का लाभ यह है कि आप परीक्षण चलाने से पहले इसे _immediately_ देखते हैं। –

4

मेरा मानना ​​है कि यहां मुद्दा यह याद है कि फ्लो एक स्थिर चेकर जबकि PropTypes एक क्रम चेकर, जो

  • फ्लो मतलब है कोडिंग जबकि नदी के ऊपर त्रुटियों को रोक सकता है है: यह सैद्धांतिक रूप से कुछ त्रुटियों को याद कर सकता है जिन्हें आप नहीं जानते (यदि आपने उदाहरण के लिए अपने प्रोजेक्ट में पर्याप्त प्रवाह लागू नहीं किया है, या गहरी घोंसले वाली वस्तुओं के मामले में)
  • PropTypes उन्हें नीचे की ओर पकड़ेगा, जबकि परीक्षण, तो यह अभ्यस्त कभी याद आती है
संबंधित मुद्दे