React学习之进阶类型检查(十二)
来源:互联网 发布:网络女神雅典娜是谁 编辑:程序博客网 时间:2024/06/01 10:24
1.PropTypes
类型检测
React
提供有一套类型检测的自己,通过React.PropTypes
来进行控制
class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); }}Greeting.propTypes = { name: React.PropTypes.string};
React.PropTypes
提供了一系列的检验器用来确保你的数据的合法性,比如说样例中的React.PropTypes.string
,如果提供了不合法的数据,在javascript
的console
中会出现警告,由于性能原因,propTypes
的使用一般是在测试阶段,不用在用户发布阶段。
以下是React.PropTypes
的一些检验器的例子
MyComponent.propTypes = { //这些检验器可以检验javascript的基本数据类型 optionalArray: React.PropTypes.array, optionalBool: React.PropTypes.bool, optionalFunc: React.PropTypes.func, optionalNumber: React.PropTypes.number, optionalObject: React.PropTypes.object, optionalString: React.PropTypes.string, optionalSymbol: React.PropTypes.symbol, //任何可以被放在视图中的元素(true和DOM元素不允许) optionalNode: React.PropTypes.node, //为JSX对象 optionalElement: React.PropTypes.element, // 用于限制只能输入特定的类的实例,这里就是只能是Message类的实例 optionalMessage: React.PropTypes.instanceOf(Message), // 用于限定数据必须是枚举的数据中的一个 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 }), // 用于限定这个属性必须存在,并且还必须是一个函数 requiredFunc: React.PropTypes.func.isRequired, // 用于限定这个属性必须存在,可以为任何值 requiredAny: React.PropTypes.any.isRequired, // 用于限定这个属性必须存在,可以为xxx值 requiredAny: React.PropTypes.xxx.isRequired, //如果你想自定义检验器,如下(这是针对一个基本数据类型的属性的) //propName是属性的名字,componentName是组件名,这个东西React会自动处理传入 customProp: function(props, propName, componentName) { if (!/matchme/.test(props[propName])) { return new Error( 'Invalid prop `' + propName + '` supplied to' + ' `' + componentName + '`. Validation failed.' ); } }, // 如果你想自定义检验器,如下(这是针对一个数组和对象) //propValue是props.name的值 //key是数组的索引 //componentName是组件名称 //location是本地的props对象 //propFullName是属性的全称比如name[key]. customArrayProp: React.PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) { if (!/matchme/.test(propValue[key])) { return new Error( 'Invalid prop `' + propFullName + '` supplied to' + ' `' + componentName + '`. Validation failed.' ); } })};
2.defaultProps
默认属性值设置
class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); }}//默认属性值设置Greeting.defaultProps = { name: 'Stranger'};//没有进行name设置,会自动进行默认属性设置ReactDOM.render( <Greeting />, document.getElementById('example'));
这个默认属性的设置非常有意思,可以一定程度上减少代码复杂度
下一篇将讲
React
中ref
属性的必要性
1 0
- React学习之进阶类型检查(十二)
- React学习之进阶上下文(十九)
- React学习之进阶JSX语法(十一)
- React学习之进阶ref的必要性(十三)
- React学习之进阶非控制型组件(十四)
- React学习之进阶性能优化(十五)
- React学习之进阶非ES6(十六)
- React学习之进阶非JSX的痛处(十七)
- React学习之进阶调解器(十八)
- React学习之进阶WEB组件(二十)
- React学习之进阶ref的必要性(十三)
- C#学习笔记(十二):事件进阶
- React学习之高级顶配API说明(二十二)
- PHP学习笔记十二之时间与日期(进阶篇)
- Android学习笔记进阶十二之裁截图片
- 【opencv学习之二十二】Threshold阈值分割进阶adaptiveThreshold
- React学习之进阶终临高阶组件(二十一)
- React Native 学习笔记十二(嵌入原生应用 甚是坑啊)
- #include<stack> 南阳oj括号匹配
- xmlhttp.responsetext 获取servlet的输出值比较出现问题
- 蓝以中老师《高等代数》第02章:向量空间与矩阵,笔记
- TextView实现文本的收起与展示
- 嵌入式课堂小测试(一)
- React学习之进阶类型检查(十二)
- 【Unity3d游戏开发】浅谈Unity中的GC以及优化
- 2017-03-18 Ice_cream’s world II
- g++ gdb
- Java代码6种方法获取spring 容器的bean
- 初识文件系统
- java运算符
- C# vs中应用设置变量如何绑定及代码中如何使用
- LoRaWAN协议中文版 第3章 PHY帧格式