2016-01-16 19 views
10

React PropType doğrulamasını devre dışı bırakmanın tek yolunu bildiğim kadarıylaolarak tanımlanmış process.env.NODE_ENV ile tepki vermektir.Geliştirme modunda React PropType doğrulamasını devre dışı bırakmak veya hızlandırmak için herhangi bir yol var mı?

Ancak, aşağıdaki nedenlerle çalışma zamanı PropType doğrulaması yapmadan geliştirme modunu kullanmak istiyorum: Onlar önemli ölçüde Uygulamamı yavaşlatmak

  • . Ben anlamına Redux, kullanıyorum
  • I (evet ben vs düzgün shouldComponentUpdate var) çoklu seviyelerde PropType doğrulama ile oldukça derin bileşen hiyerarşi var
    • : PropType doğrulama çünkü sonuçları profilleme üst suçlu olduğunu tüm güncellemeler veya hiyerarşinin tepesine yakın başlamak
    • Ben hala tüm diğer bakınız ayrıca devre dışı alacağı uyarıları ve hataları, tepki istediğiniz ikinci
  • başına 30 güncellemeler için çaba fare sürükleme etkileşime üretim modu. Flowtype, bir çok durumda Proptypes'i hala statik olarak doğrulayabilir.

başka bir şey uzakta şeritler babel-plugin-react-transform için bir trafo yapsaydınız tüm bileşenleri propTypes (veya belki de sadece bileşenleri ben belirli bir şekilde açıklamalı ettik olanlar), fakat daha basit bir yolu olup olmadığını merak ediyorum Bunu yapmak için, React, PropType doğrulamasını devre dışı bırakmak için bir derleme zamanı bayrağı sağlayabilir.

GÜNCELLEME: O babel eklentisi zaten (https://www.npmjs.com/package/babel-plugin-react-remove-prop-types)

cevap

5

Kısa cevap var: Sadece PropType doğrulama Şu


devre dışı bırakmak için basit bir bayrak yoktur, PropType doğrulama __DEV__ küresel değişkeni olarak etkindir . Eğer false olarak değiştirilirse, söylediğin gibi yapamayacağınız diğer React uyarılarını ve hatalarını kaybedersiniz.

Bu kod here in ReactDOMFactoriesReactElementValidator ve ReactElement fabrikalar unsuru oluşturma nasıl çalışacağını tanımlamak için seçilir gösterir:

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

ReactElementValidator.createElement yılında bunu çağırır görebilirsiniz ReactElement.createElement ve sonra 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; 
    } 

Bu bilgilerin size nasıl yardımcı olabileceğinden emin değilim, ancak en azından PropType'ı merak ettiğiniz gibi bir bayrakla devre dışı bırakmanın kolay bir yolu olmadığını gösteriyor. .


GÜNCELLEME -
Andy/2017 10/Mayıs bir Babel Plugin that removes Prop Types olduğunu gördük.
Test etmemiştim. Size uygun olup olmadığını görmek için eklentinin Is it safe? bölümünü okuduğunuzdan emin olun.

+0

Bu harika, React içsellerinin çoğunu hiç okumadım, ama bu şekilde takılı bir eleman yaratma yaptıklarının düzgün olması. – Andy

+1

Proptipleri kaldırdığım bir babel eklentisi hakkında bir not ekledim (https://www.npmjs.com/package/babel-plugin-react-remove-prop-types) – Andy

İlgili konular