zoukankan      html  css  js  c++  java
  • Typechecking with PropTypes

    React拥有内置的类型检测机制,为组件的props运行类型检测。

    PropTypes定义为组件类自身的属性,用以定义prop的类型。在开发模式下,当提供一个不合法的值作为prop时,控制台会出现警告;在产品模式下,为了性能考虑应忽略propTypes

    class Greeting extends React.Component {
      render() {
        return (
          <h1>Hello, {this.props.name}</h1>
        );
      }
    }
    
    Greeting.propTypes = { // 静态属性,只能通过类名.属性名指定
      name: React.PropTypes.string
    };

    React.PropTypes输出一系列的验证器,用以确保你收到的数据是合法的。

    下面是一个例子记录了不同的验证器;

    MyComponent.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,
      optionalSymbol: React.PropTypes.symbol,
    
      // 任何可以被渲染的事物:numbers, strings, elements or an array
      // (or fragment) containing these types.
      optionalNode: React.PropTypes.node,
    
      // A React element.
      optionalElement: React.PropTypes.element,
    
      // 声明一个prop是某个类的实例,用到了JS的instanceof运算符
      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或者throw,这些在oneOfType中都没用 
      customProp: function(props, propName, componentName) {
        if (!/matchme/.test(props[propName])) {
          return new Error(
            'Invalid prop `' + propName + '` supplied to' +
            ' `' + componentName + '`. Validation failed.'
          );
        }
      },
    
      // 你也可以为arrayOf和objectOf提供一个验证器
      // 如果验证失败,它也应该返回一个Error对象
      // 在array或者object中,验证器对于每个key都会被调用The first two
      // 验证器的前两个arguments是array或者object自身以及当前的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.'
          );
        }
      })
    };

     

  • 相关阅读:
    Luogu P4246 [SHOI2008]堵塞的交通(线段树+模拟)
    Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
    Luogu P2042 [NOI2005]维护数列(平衡树)
    Luogu P1052 过河(dp)
    Luogu P1041 传染病控制(搜索)
    Luogu P2717 寒假作业(平衡树)
    Luogu P2822 组合数问题(前缀和)
    Luogu P2827 蚯蚓(模拟)
    随机图片测试
    Luogu P2458 [SDOI2006]保安站岗(树形dp)
  • 原文地址:https://www.cnblogs.com/YangqinCao/p/6140538.html
Copyright © 2011-2022 走看看