你如何validationReactJS中嵌套对象的PropTypes?

我使用一个数据对象作为我的ReactJS组件的道具。

<Field data={data} /> 

我知道它很容易validationPropTypes对象本身:

 propTypes: { data: React.PropTypes.object } 

但是如果我想validation里面的值呢? 即。 data.id,data.title?

 props[propName]: React.PropTypes.number.required // etc... 

您可以使用React.PropTypes.shape来validation属性:

 propTypes: { data: React.PropTypes.shape({ id: React.PropTypes.number.isRequired, title: React.PropTypes.string }) } 

更新

正如@Chris在评论中指出的,从React版本15.5.0开始, React.PropTypes已经转移到了包装prop-types

 import PropTypes from 'prop-types'; propTypes: { data: PropTypes.shape({ id: PropTypes.number.isRequired, title: PropTypes.string }) } 

更多信息

如果React.PropTypes.shape没有给你你想要的types检查级别,看看tcomb-react 。

它提供了一个toPropTypes()函数,通过使用React对定义自定义propTypesvalidation器的支持来validation使用tcomb库定义的模式,并使用tcomb-validation运行validation 。

来自其文档的基本示例 :

 // 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> ); } });