2016-01-16 4 views
10

जहां तक ​​मुझे पता है कि रिएक्ट प्रोपटाइप सत्यापन को अक्षम करने का एकमात्र तरीका process.env.NODE_ENV के साथ प्रतिक्रिया को 'production' के रूप में परिभाषित करना है।विकास मोड में रिएक्ट प्रोपटाइप सत्यापन को अक्षम या गति देने का कोई तरीका है?

हालांकि, मैं निम्नलिखित कारणों के लिए क्रम PropType सत्यापन के बिना विकास मोड का उपयोग करना चाहते हैं:

  • वे काफी मेरे ऐप को धीमा।
    • मैं (हाँ मैं उचित shouldComponentUpdate आदि होती हैं) कई स्तरों पर PropType मान्यता के साथ एक काफी गहरी घटक पदानुक्रम है
    • मैं Redux, जिसका अर्थ है उपयोग कर रहा हूँ: PropType मान्यता परिणामों की रूपरेखा क्योंकि में शीर्ष अपराधी है सभी अद्यतन पर या पदानुक्रम के शीर्ष के पास शुरू
    • मैं माउस खींचें बातचीत जो प्रति सेकंड
  • 30 अद्यतन के लिए प्रयास करते हैं मैं अभी भी अन्य सभी देख चेतावनी और त्रुटियों, जो भी में अक्षम जायेगा प्रतिक्रिया करना चाहते हैं उत्पादन मोड
  • फ्लोटाइप स्पष्ट रूप से कई मामलों में प्रोपटाइप को स्थिर रूप से मान्य कर सकता है।

और कुछ नहीं मैं दूर स्ट्रिप्स कि babel-plugin-react-transform के लिए एक ट्रांसफार्मर बना सकते हैं सभी घटकों को 'propTypes (या शायद ही घटकों मैं एक निश्चित तरीके से एनोटेट गया है उन लोगों के लिए), लेकिन हो, तो एक सरल तरीका मैं सोच रहा हूँ ऐसा करने के लिए, क्योंकि प्रतिक्रिया आसानी से PropType सत्यापन को अक्षम करने के लिए एक संकलित-समय ध्वज प्रदान कर सकता है।

अद्यतन: कि कोलाहल प्लगइन पहले से मौजूद है (https://www.npmjs.com/package/babel-plugin-react-remove-prop-types)

उत्तर

5

लघु जवाब: केवल PropType सत्यापन


वर्तमान में निष्क्रिय करने के लिए कोई सीधा झंडा है, PropType सत्यापन __DEV__ वैश्विक चर रूप से सक्षम है । यदि यह गलत हो गया है, तो आप अन्य प्रतिक्रिया चेतावनियों और त्रुटियों को खो देंगे, जैसा कि आपने कहा था, आप नहीं कर सकते।

इस कोड here in ReactDOMFactories दिखाता है कि कैसे ReactElementValidator और ReactElement कारखानों कैसे एक तत्व निर्माण काम करेंगे परिभाषित करने के लिए चुना जाता है:

function createDOMFactory(tag) { 
    if (__DEV__) { 
    return ReactElementValidator.createFactory(tag); 
    } 
    return ReactElement.createFactory(tag); 
} 

ReactElementValidator.createElement में आप यह है कि यह कॉल देख सकते हैं ReactElement.createElement और फिर validatePropTypes:

var ReactElementValidator = { 

    createElement: function(type, props, children) { 

    /* some code here */ 

    var element = ReactElement.createElement.apply(this, arguments); 

    /* some code here */ 

    // here would be a good place for the flag that you need 
    validatePropTypes(element); 

    return element; 
    } 

मुझे यकीन नहीं है कि यह जानकारी आपकी मदद कैसे कर सकती है लेकिन कम से कम यह दिखाती है कि एक ध्वज द्वारा PropType को अक्षम करने का कोई आसान तरीका नहीं है जैसा आपने सोचा था ।


अद्यतन - 10/मई/2017
Andy पाया है कि वहाँ एक Babel Plugin that removes Prop Types
मैंने इसका परीक्षण नहीं किया था। प्लगइन के Is it safe? अनुभाग को पढ़ने के लिए सुनिश्चित करें कि यह आपके लिए उपयुक्त है या नहीं।

+0

यह अच्छा है, मैंने कभी भी बहुत से आंतरिक इंटर्नल नहीं पढ़े हैं, लेकिन यह साफ है कि उन्होंने तत्व निर्माण को इस तरह प्लग किया है। – Andy

+1

मैंने प्रॉपर्टी को हटाने के लिए मिले एक लेबल प्लगइन के बारे में एक नोट जोड़ा (https://www.npmjs.com/package/babel-plugin-react-remove-prop-types) – Andy

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