您的位置:首页 > Web前端 > React

React组件的防呆机制(propTypes)

2020-04-26 19:04 856 查看

Prop验证

随着应用不断变大,为了保证组件被正确使用变得越来越重要。为此我们引入propsTypes。React.PropTypes提供很多验证器(valodator)来验证传入的数据的有效性。当向props传入无效数据是,JavaScript控制台会抛出错误。为了性能考虑,只在开发环境验证propsTypes.

 

GroupSelect.defaultProps = {
};
GroupSelect.propTypes = {
name: PropTypes.string,
children: PropTypes.node,
style: PropTypes.objectOf(PropTypes.any),
className: PropTypes.string,
};

React组件属性类型(propTypes)校验

 

React.createClass({
propTypes: {
// 可以声明 prop 为指定的 JS 基本类型。默认
// 情况下,这些 prop 都是可传可不传的。
optionalArray: React.PropTypes.array,
optionalBool: React.PropTypes.bool,
optionalFunc: React.PropTypes.func,
optionalNumber: React.PropTypes.number,
optionalObject: React.PropTypes.object,
optionalString: React.PropTypes.string,

// 所有可以被渲染的对象:数字,
// 字符串,DOM 元素或包含这些类型的数组。
optionalNode: React.PropTypes.node,

// React 元素
optionalElement: React.PropTypes.element,

// 用 JS 的 instanceof 操作符声明 prop 为类的实例。
optionalMessage: React.PropTypes.instanceOf(Message),

// 用 enum 来限制 prop 只接受指定的值。
optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),

// 指定的多个对象类型中的一个
optionalUnion: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
React.PropTypes.instanceOf(Message)
]),

// 指定类型组成的数组
optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),

// 指定类型的属性构成的对象
optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),

// 特定形状参数的对象
optionalObjectWithShape: React.PropTypes.shape({
color: React.PropTypes.string,
fontSize: React.PropTypes.number
}),

// 以后任意类型加上 `isRequired` 来使 prop 不可空。
requiredFunc: React.PropTypes.func.isRequired,

// 不可空的任意类型
requiredAny: React.PropTypes.any.isRequired,

// 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接
// 使用 `console.warn` 或抛异常,因为这样 `oneOfType` 会失效。
customProp: function(props, propName, componentName) {
if (!/matchme/.test(props[propName])) {
return new Error('Validation failed!');
}
}
},
/* ... */

转载于:https://www.cnblogs.com/wy1935/p/7098710.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
anke5248 发布了0 篇原创文章 · 获赞 0 · 访问量 249 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: