React.PropTypes已死,React中的PropTypes万岁
来自菜鸟教程
从 React v15.5 开始,PropTypes 在 React 包中已被弃用,并被赋予了它们自己的 包。
改变是生活中不可避免的一部分。
结果是双重的。 1) 如果您使用另一种类型检查机制,则不必担心向最终用户发送不必要的批量。 省略进口和银行减重。 2) 你的 PropType 声明将比你想象的更苗条。
不利的一面是,如果您自 v15.3 以来一直忽略有关直接调用 PropTypes 的弃用警告(没有判断力),那只鸡已经回家了。
让我们开始吧,但首先你需要在你的项目中安装这个包。
npm install prop-types --save
或者,你知道,做 Yarn 的事情。 无论哪种方式,这都是带有验证的旧简单组件:
import React from 'react';
function Detail ({caption, style}) {
return <p style={style}>{caption}</p>
}
Detail.propTypes = {
caption: React.PropTypes.string.isRequired,
style: React.PropTypes.objectOf(
React.PropTypes.string
),
}
export default Detail;
这是新的方式:
import React from 'react';
import PropTypes from 'prop-types';
function Detail ({caption, style}) {
return <p style={style}>{caption}</p>
}
Detail.propTypes = {
caption: PropTypes.string.isRequired,
style: PropTypes.objectOf(
PropTypes.string
),
}
export default Detail;
实际上,擦掉它。 我们承诺苗条; 所以给它一个像这样的解构旋转:
import React from 'react';
import {string, objectOf} from 'prop-types';
function Detail ({caption, style}) {
return <p style={style}>{caption}</p>
}
Detail.propTypes = {
caption: string.isRequired,
style: objectOf(
string
),
}
export default Detail;
亲爱的朋友,这就像一幅画一样漂亮,好消息是它完全像你习惯的那样工作。 开发中的警告。 生产中的沉默。
唯一值得注意的例外是我们上面提到的那个:直接调用 PropTypes。 这些检查将在生产中自动调用以下块:
var productionTypeChecker = function () {
invariant(false, 'React.PropTypes type checking code is stripped in production.');
};
抛出错误并破坏东西。 你必须在你的代码中重构这些调用,或者开发出你自己的 prop-types 分支,以使它们保持在升级列车上。
无论您做什么,都不要为这种变化而烦恼。 这是一个带有轻微不便税的净收益。