• 【react】利用prop-types第三方库对组件的props中的变量进行类型检测


    1.安装:npm install prop-types --save

    2.使用

    import React, { Component } from 'react';
    import PropTypes from 'prop-types'
    
    const users = [
      1,
      { username: 'Tongbao', age: 22, gender: 'male' },
      { username: 'Lily', age: 19, gender: 'female' },
      { username: 'Lucy', age: 20, gender: 'female' }
    ]
     
    class User extends React.Component {
      render () {
        const { user } = this.props
        return (
          <div>
            <div>姓名:{user.username}</div>
            <div>年龄:{user.age}</div>
            <div>性别:{user.gender}</div>
            <hr />
          </div>
        )
      }
    }
    
    User.propTypes = {
      user: PropTypes.object
    }
    
    class App extends Component {
      render() {
        return (
          <div>
            {users.map((user, i) => <User key={i} user={user} />)}
          </div>
        );
      }
    }
    
    export default App;

    3.错误展示

    参考:

    import PropTypes from 'prop-types';
    
    MyComponent.propTypes = {
      // You can declare that a prop is a specific JS type. By default, these
      // are all optional.
      optionalArray: PropTypes.array,
      optionalBool: PropTypes.bool,
      optionalFunc: PropTypes.func,
      optionalNumber: PropTypes.number,
      optionalObject: PropTypes.object,
      optionalString: PropTypes.string,
      optionalSymbol: PropTypes.symbol,
    
      // Anything that can be rendered: numbers, strings, elements or an array
      // (or fragment) containing these types.
      optionalNode: PropTypes.node,
    
      // A React element.
      optionalElement: PropTypes.element,
    
      // You can also declare that a prop is an instance of a class. This uses
      // JS's instanceof operator.
      optionalMessage: PropTypes.instanceOf(Message),
    
      // You can ensure that your prop is limited to specific values by treating
      // it as an enum.
      optionalEnum: PropTypes.oneOf(['News', 'Photos']),
    
      // An object that could be one of many types
      optionalUnion: PropTypes.oneOfType([
        PropTypes.string,
        PropTypes.number,
        PropTypes.instanceOf(Message)
      ]),
    
      // An array of a certain type
      optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
    
      // An object with property values of a certain type
      optionalObjectOf: PropTypes.objectOf(PropTypes.number),
    
      // An object taking on a particular shape
      optionalObjectWithShape: PropTypes.shape({
        color: PropTypes.string,
        fontSize: PropTypes.number
      }),
    
      // You can chain any of the above with `isRequired` to make sure a warning
      // is shown if the prop isn't provided.
      requiredFunc: PropTypes.func.isRequired,
    
      // A value of any data type
      requiredAny: PropTypes.any.isRequired,
    
      // You can also specify a custom validator. It should return an Error
      // object if the validation fails. Don't `console.warn` or throw, as this
      // won't work inside `oneOfType`.
      customProp: function(props, propName, componentName) {
        if (!/matchme/.test(props[propName])) {
          return new Error(
            'Invalid prop `' + propName + '` supplied to' +
            ' `' + componentName + '`. Validation failed.'
          );
        }
      },
    
      // You can also supply a custom validator to `arrayOf` and `objectOf`.
      // It should return an Error object if the validation fails. The validator
      // will be called for each key in the array or object. The first two
      // arguments of the validator are the array or object itself, and the
      // current item's key.
      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.'
          );
        }
      })
    };
  • 相关阅读:
    学习ios键盘和textfield之间操作体会
    关于Cannot assign to 'self' outside of a method in the init family解决方法
    "this class is not key value coding-compliant for the key ..."问题的解决
    在编译oc中protocol时出现的错误
    关于oc中出现的typedef的用法/定义函数指针
    VC++、MFC、COM和ATL的区别
    leetcode : Spiral Matrix II
    leetcode : Length of Last Word [基本功]
    leetcode : triangle
    leetcode : Insert Interval
  • 原文地址:https://www.cnblogs.com/xutongbao/p/9924777.html
Copyright © 2020-2023  润新知