据我所知,禁用React PropType验证的唯一方法是使用定义为process.env.NODE_ENV
的'production'
丑化React。
但是,由于以下原因,我想在没有运行时PropType验证的情况下使用开发模式:
如果没有别的办法,我可以为
babel-plugin-react-transform
创建一个转换器,剥离所有组件的propTypes
(或者可能仅去除我已经以某种方式注释的那些组件),但是我想知道是否有更简单的方法来实现,因为React可以轻松地提供一个编译时标志来禁用PropType验证。更新:该babel插件已经存在(https://www.npmjs.com/package/babel-plugin-react-remove-prop-types)
最佳答案
简短答案:没有简单的标志可以仅禁用PropType验证
当前,PropType验证是通过__DEV__
全局变量启用的。
如果将其更改为false,您将失去其他的React警告和错误,正如您所说的那样。
此代码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的简单方法。
更新-2017年5月10日
Andy发现存在一个Babel Plugin that removes Prop Types。
我没有测试。请务必阅读插件的Is it safe?部分,以查看它是否适合您。