你如何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对定义自定义propTypes
validation器的支持来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> ); } });