prop中增加限制与默认prop

注 : React.PropTypes 在 React v15.5 版本后已经移到了 prop-types 库。

import PropTypes from 'prop-types'
 
render(){
        return (
            <div>
               <div>111</div>
      //子组件可以{...this.props}这样获取到当前组件的父组件传来的所有props
               <Child {...this.props}></Child>
            </div>
        )
    }
// 定义一个默认的props
const defaultProps = {
    userId:111111111
}

CompontentsName.propTypes = { userId: PropTypes.number.isRequired }
// 将定义的props传进去
CompontentsName.defaultProps = defaultProps;
//更多验证器说明如下 : 
MyComponent.propTypes = {
    // 可以声明 prop 为指定的 JS 基本数据类型,默认情况,这些数据是可选的
    optionalArray: PropTypes.array,
    optionalBool:PropTypes.bool,
    optionalFunc:PropTypes.func,
    optionalNumber:PropTypes.number,
    optionalObject:PropTypes.object,
    optionalString:PropTypes.string,
 
    // 可以被渲染的对象 numbers, strings, elements 或 array
    optionalNode:PropTypes.node,
 
    //  React 元素
    optionalElement:PropTypes.element,
 
    // 用 JS 的 instanceof 操作符声明 prop 为类的实例。
    optionalMessage:PropTypes.instanceOf(Message),
 
    // 用 enum 来限制 prop 只接受指定的值。
    optionalEnum:PropTypes.oneOf(['News', 'Photos']),
 
    // 可以是多个对象类型中的一个
    optionalUnion:PropTypes.oneOfType([
     PropTypes.string,
     PropTypes.number,
     PropTypes.instanceOf(Message)
    ]),
 
    // 指定类型组成的数组
    optionalArrayOf:PropTypes.arrayOf(PropTypes.number),
 
    // 指定类型的属性构成的对象
    optionalObjectOf:PropTypes.objectOf(PropTypes.number),
 
    // 特定 shape 参数的对象
    optionalObjectWithShape:PropTypes.shape({
      color:PropTypes.string,
      fontSize:PropTypes.number
    }),
 
    // 任意类型加上 `isRequired` 来使 prop 不可空。
    requiredFunc:PropTypes.func.isRequired,
 
    // 不可空的任意类型
    requiredAny: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/chenlw/p/13231119.html