2016-01-16 6 views
10

私が知っている限り、React PropType検証を無効にする唯一の方法は、process.env.NODE_ENVのReactを'production'と定義しています。開発モードでReact PropTypeの検証を無効にするかスピードアップする方法はありますか?

しかし、私は次のような理由から、ランタイムPropType検証せずに開発モードを使用したいと思います:彼らは非常に私のアプリを遅く

  • 。私は意味Reduxのを、使用してい
  • (はい、私はなど、適切shouldComponentUpdateを持っていない)複数のレベルでPropTypeの検証とかなり深いコンポーネント階層を持つ
    • :のでPropTypeの検証結果をプロファイリングでトップの犯罪者でありますすべての更新がでたり、階層の最上部付近に開始
    • 私はまだ他のすべてを参照してくださいもで無効になるだろう警告やエラーを、反応するようにしたい秒
  • あたり30回の更新のために努力マウスドラッグ相互作用を持っています生産モード。
  • Flowtypeは明らかに多くの場合、PropTypeを静的に検証できます。

何も私は剥ぎbabel-plugin-react-transform用変圧器を作成することができなかった場合は、すべてのコンポーネントのpropTypes(またはおそらく唯一のコンポーネント私は特定の方法で注釈をつけてきたのもの)は、より簡単な方法がある場合、私は思ったんだけどReact の場合、PropTypeの検証を無効にするコンパイル時のフラグを簡単に提供できるため、これを行う必要があります。

UPDATE:そのバベルプラグインはすでに(https://www.npmjs.com/package/babel-plugin-react-remove-prop-types

答えて

5

短い答えが存在する:のみPropType検証


を無効にする簡単なフラグ現在、PropType検証が__DEV__グローバル変数で有効にされていないがあります。 falseに変更された場合、あなたが言ったように他のReactの警告とエラーが失われます。

このコードhere in ReactDOMFactoriesReactElementValidatorReactElement工場は要素の作成が動作する方法を定義するために選択される方法を示しています。

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をフラグで無効にする簡単な方法はないことを少なくとも示しています。


UPDATE - 10 /月/ 2017
AndyBabel Plugin that removes Prop Typesがあることがわかりました。
私はそれをテストしていませんでした。それがあなたに合っているかどうかを確認するには、プラグインのIs it safe?セクションを必ず読んでください。

+0

これはすごくいいですが、私はReactの内部をあまり読んだことはありませんでしたが、そのようなプラグイン可能な要素作成をしたことはすばらしいことです。 – Andy

+1

proptypes(https://www.npmjs.com/package/babel-plugin-react-remove-prop-types)を削除するために見つけたバベルプラグインについてのメモを追加しました。 – Andy

関連する問題