zoukankan      html  css  js  c++  java
  • 【React系列】Props 验证

    Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效。当向 props 传入无效数据时,JavaScript 控制台会抛出警告。

    常见的验证器:

    
        React.createClass({
          propTypes: {
            // 可以声明 prop 为指定的 JS 基本数据类型,默认情况,这些数据是可选的
            optionalArray: React.PropTypes.array,
            optionalBool: React.PropTypes.bool,
            optionalFunc: React.PropTypes.func,
            optionalNumber: React.PropTypes.number,
            optionalObject: React.PropTypes.object,
            optionalString: React.PropTypes.string,
         
            // 可以被渲染的对象 numbers, strings, elements 或 array
            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),
         
            // 特定 shape 参数的对象
            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!');
              }
            }
          }
        });
    
    注意: React.PropTypes 自 React v15.5 起已弃用。请使用 prop-types 库代替。
    
    import PropTypes from 'prop-types';
    
    MyComponent.propTypes = {
      // 你可以将属性声明为以下 JS 原生类型
      optionalArray: PropTypes.array,
      optionalBool: PropTypes.bool,
      optionalFunc: PropTypes.func,
      optionalNumber: PropTypes.number,
      optionalObject: PropTypes.object,
      optionalString: PropTypes.string,
      optionalSymbol: PropTypes.symbol,
    
      // 任何可被渲染的元素(包括数字、字符串、子元素或数组)。
      optionalNode: PropTypes.node,
    
      // 一个 React 元素
      optionalElement: PropTypes.element,
    
      // 你也可以声明属性为某个类的实例,这里使用 JS 的
      // instanceof 操作符实现。
      optionalMessage: PropTypes.instanceOf(Message),
    
      // 你也可以限制你的属性值是某个特定值之一
      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),
    
      // 一个指定属性及其类型的对象
      optionalObjectWithShape: PropTypes.shape({
        color: PropTypes.string,
        fontSize: PropTypes.number
      }),
    
      // 你也可以在任何 PropTypes 属性后面加上 `isRequired` 
      // 后缀,这样如果这个属性父组件没有提供时,会打印警告信息
      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(
            'Invalid prop `' + propName + '` supplied to' +
            ' `' + componentName + '`. Validation failed.'
          );
        }
      },
    
      // 不过你可以提供一个自定义的 `arrayOf` 或 `objectOf` 
      // 验证器,它应该在验证失败时返回一个 Error 对象。 它被用
      // 于验证数组或对象的每个值。验证器前两个参数的第一个是数组
      // 或对象本身,第二个是它们对应的键。
      customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
        if (!/matchme/.test(propValue[key])) {
          return new Error(
            'Invalid prop `' + propFullName + '` supplied to' +
            ' `' + componentName + '`. Validation failed.'
          );
        }
      })
    };
    

    来源:https://segmentfault.com/a/1190000010921839

  • 相关阅读:
    Android开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/qixidi/p/10160755.html
Copyright © 2011-2022 走看看