据我所知,禁用React PropType验证的唯一方法是uglify React process.env.NODE_ENV
定义为'production'
。
但是,我想在没有运行时PropType验证的情况下使用开发模式,原因如下:
如果没有别的我可以为babel-plugin-react-transform
创建一个转换器去除所有组件'propTypes
(或者只是那些我以某种方式注释的组件),但我想知道如果有更简单的方法,因为React 可以轻松提供编译时标志来禁用PropType验证。
更新:该babel插件已存在(https://www.npmjs.com/package/babel-plugin-react-remove-prop-types)
答案 0 :(得分:5)
简答:没有简单的标志只能禁用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?部分,了解它是否适合您。