我正在尝试使用React的ES6类语法,我遇到了一个我无法理解的问题。
使用下面的类,由于某种原因,propTypes检查没有运行,但我无法弄清楚原因。
import { Component } from "react"
import PropTypes from "prop-types"
class Summary extends Component {
constructor() {
super()
this.displayName = "Summary"
}
render() {
const {ingredients, steps, title} = this.props
return(
<div className="Summary">
<h1>{title}</h1>
<p>
<span>{ingredients} Ingredients</span> | <span> {steps} Steps</span>
</p>
</div>
)
}
}
Summary.defaultProps = {
ingredients: 0,
steps: 0,
title: "[untitled recipie]"
}
Summary.propTypes = {
ingredients: PropTypes.number.isRequired,
steps: PropTypes.number.isRequired,
title: function (props, propName) {
let title = props[propName];
let valid = null;
if (typeof title !== "string") return new Error("A title must be a string");
if (title.length > 20) return new Error("Title's length is over 20 characters");
return valid;
}
}
export default Summary
如果我尝试用以下内容创建元素:
<Summary title={5} steps="some string" />
我没有错误。它只是将标题呈现为“5”,将步骤呈现为“某些字符串”。它应该抛出,因为步骤的propType需要一个数字,而title的propType需要一个字符串。