• proptypes介绍


    开始

    prop-types的主要作用:对props中数据类型进行检测及限制

    引用方法:import PropTypes from 'prop-types'

    用法:

    // 基本用法 用来检测数据类型
    componentsName.PropTypes = {
        参数变量: PropTypes.类型
    }
    // 例子
    myComponents.PropTypes = {
        name: Proptypes.string
    }

    (官方文档原例)

    1. 指定基本数据类型
     

    1. MyComponent.propTypes = {
          // 你可以将属性声明为以下 JS 原生类型
          optionalArray: PropTypes.array,
          optionalBool: PropTypes.bool,
          optionalFunc: PropTypes.func,
          optionalNumber: PropTypes.number,
          optionalObject: PropTypes.object,
          optionalString: PropTypes.string,
          optionalSymbol: PropTypes.symbol,
      }
      检
      测是不是能被渲染的元素,function就不能被渲染
    MyComponent.propTypes = {
     // 任何可被渲染的元素(包括数字、字符串、子元素或数组)。
      optionalNode: PropTypes.node,   
    }
    1. 检测是否是原型的实例
    MyComponent.propTypes = {
        optionalMessage: PropTypes.instanceOf(Message),
    }
    1. 限制特定的内容——只能是news或者photos
    MyComponent.propTypes = {
        // 你也可以限制你的属性值是某个特定值之一
        optionalEnum: PropTypes.oneOf(['News', 'Photos']),
    }
    1. 在一定范围内的类型——可以是string,number,实例
    MyComponent.propTypes = {
        // 限制它为列举类型之一的对象
        optionalUnion: PropTypes.oneOfType([
            PropTypes.string,
            PropTypes.number,
            PropTypes.instanceOf(Message)
        ]),
    }
    1. 指定所有内容类型的数组——数组所有内容必须都是number类型
    MyComponent.propTypes = {
       // 一个指定元素类型的数组
      optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
    }
    1. 指定元素类型的对象——对象的内容必须都是number
    MyComponent.propTypes = {
        // 一个指定类型的对象
        optionalObjectOf: PropTypes.objectOf(PropTypes.number),
    }
    1. 指定属性及类型的对象——color必须是string 类型,fontSize是number类型
    MyComponent.propTypes = {
        // 一个指定属性及其类型的对象
        optionalObjectWithShape: PropTypes.shape({
         color: PropTypes.string,
         fontSize: PropTypes.number
        }),
    }
    1. 检测内容是否存在——没有的话会打印警告信息
    MyComponent.propTypes = {
        // 你也可以在任何 PropTypes 属性后面加上 `isRequired` 
        // 后缀,这样如果这个属性父组件没有提供时,会打印警告信息
        requiredFunc: PropTypes.func.isRequired,
    
    }
    1. 任意数据类型——随意类型都可以,但是内容要存在
    MyComponent.propTypes = {
        // 任意类型的数据
        requiredAny: PropTypes.any.isRequired,
    
    }
    1. 自定义验证器
    MyComponent.propTypes = {
       // 你也可以指定一个自定义验证器。它应该在验证失败时返回
      // 一个 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.'
          );
        }
      })
    }
    1. element元素——1.是一个react元素 2.检测元素是否存在并且是个单个的子代
    // 是一个react元素
    MyComponent.propTypes = {
      optionalElement: PropTypes.element,
    }
    // 检测是否是个单个的子代
    MyComponent.propTypes = {
      optionalElement: PropTypes.element.isRequired,
    }
    1. 属性默认值——添加默认值
    class Greeting extends React.Component {
      render() {
        return (
          <h1>Hello, {this.props.name}</h1>
        );
      }
    }
    
    // 为属性指定默认值:
    Greeting.defaultProps = {
      name: 'Stranger'
    };
    
    // 渲染 "Hello, Stranger":
    ReactDOM.render(
      <Greeting />,
      document.getElementById('example')
    );
    
    // 另外一种设置默认值的方法
    static defaultProps = {
        name: 'stranger'
      }



    作者:TianYiYang
    链接:https://www.jianshu.com/p/d1207c6edc61
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    winform学习(4)控件的添加、显示和隐藏
    winform学习(3)窗体事件
    《深入理解XGBoost》
    《一篇文章搞定GBDT、Xgboost和LightGBM的面试》
    >>深入理解AutoML和AutoDL:构建自动化机器学习平台
    《浏览器工作原理与实践》 7
    《Effective Java 第三版》——《骨架实现类》
    《深入理解JVM & G1 GC》【5】
    《深入理解JVM & G1 GC》【4】
    《深入理解JVM & G1 GC》【3】
  • 原文地址:https://www.cnblogs.com/ygunoil/p/12378224.html
Copyright © 2020-2023  润新知