使用 PropTypes 进行类型检查
注意: 从 React v15.5 开始 ,React.PropTypes 助手函数已被弃用,我们建议使用 prop-types 库 来定义 contextTypes。
我们提供一个 codemod 脚本来自动转换。
随着应用规模的提升,你可以通过类型检测捕获更多的 bug。对于部分应用,你可能需要使用类似于 Flow 或者 TypeScript 等 JavaScript 扩展来对你整个应用类型进行类型检测。但即使你不使用这些,React 内置了类型检测的功能。要在组件中进行类型检测,你可以赋值 propTypes
属性。
1 | import PropTypes from 'prop-types'; |
PropTypes
输出了一系列的验证器,可以用来确保接收到的参数是有效的。例如,我们可以使用PropTypes.string
语句。当给 prop 传递了一个不正确的值时,JavaScript 控制台将会显示一条警告。出于性能的原因,propTypes
仅在开发模式中检测。
PropTypes
这里是一个示例记录提供的不同的验证器:
1 | import PropTypes from 'prop-types'; |
要求单独的 Child
使用 PropTypes.element
,你可以指定仅将单一子元素传递给组件,作为子节点。
1 | import PropTypes from 'prop-types'; |
默认的 prop 值
你可以通过赋值特定的 defaultProps
属性为 props
定义默认值:
1 | class Greeting extends React.Component { |
如果你在使用像 transform-class-properties 的 Babel 转换器,你也可以在 React 组件类中声明 defaultProps
作为静态属性。这个语法还没有最终通过,在浏览器中需要一步编译工作。更多信息,查看类字段提议。
1 | class Greeting extends React.Component { |
如果父组件没有为 this.props.name
传值,defaultProps
会给其一个默认值。propTypes
的类型检测是在defaultProps
解析之后发生的,因此也会对默认属性 defaultProps
进行类型检测。