Answers:
您可以React.PropTypes.shape
用来验证属性:
propTypes: {
data: React.PropTypes.shape({
id: React.PropTypes.number.isRequired,
title: React.PropTypes.string
})
}
更新资料
正如@Chris在评论中指出的那样,从React 15.5.0版本开始React.PropTypes
已移至package prop-types
。
import PropTypes from 'prop-types';
propTypes: {
data: PropTypes.shape({
id: PropTypes.number.isRequired,
title: PropTypes.string
})
}
如果React.PropTypes.shape
没有给您想要的类型检查级别,请看一下tcomb-react。
它提供了一个toPropTypes()
功能,使您可以利用React对定义自定义验证器的支持,使用tcomb库验证定义的模式,并使用propTypes
tcomb验证。
// define the component props
var MyProps = struct({
foo: Num,
bar: subtype(Str, function (s) { return s.length <= 3; }, 'Bar')
});
// a simple component
var MyComponent = React.createClass({
propTypes: toPropTypes(MyProps), // <--- !
render: function () {
return (
<div>
<div>Foo is: {this.props.foo}</div>
<div>Bar is: {this.props.bar}</div>
</div>
);
}
});
要注意的是,嵌套的工作深度超过了一层。这在验证URL参数时对我很有用:
propTypes = {
match: PropTypes.shape({
params: PropTypes.shape({
id: PropTypes.string.isRequired
})
})
};
id
仅当存在match.params
对象时才需要,还是isRequired
级联,即带有道具match
的params
对象才需要is 级联id
?即,如果未提供任何参数,它将仍然有效吗?
match
需要拥有params
和params
需要拥有id
”。
match
存在且If match
包含params
则它必须params
包含一个字符串id
。