类型验证-React检查组件传入的props参数

prop-types包

yarn add prop-types -S

index.jsx

import React, { Component } from 'react'
import Child from './Child'
import { Abc } from './Abc'

const abc = new Abc()

class Index extends Component {

  state = {
    count: 0,
  }

  render() {
    return (
      <>
        <Child title={new Abc()}>
          <div>abc</div>
          <div>def</div>
        </Child>
      </>
    );
  }
}

export default Index;
 optionalArray: PropTypes.array,
 optionalBool: PropTypes.bool,
 optionalFunc: PropTypes.func,
 optionalNumber: PropTypes.number,
 optionalObject: PropTypes.object,
 optionalString: PropTypes.string,
 optionalSymbol: PropTypes.symbol,

Child.jsx

import React, { Component } from 'react'
import { 
  string, 
  node, 
  element, 
  elementType, 
  instanceOf,
  oneOf,
  oneOfType,
  number,
  arrayOf,
  shape,
  exact
} from 'prop-types'
import { Abc } from './Abc'

class Child extends Component {
  static defaultProps = {
    title: 'default props value'
  }

  static propTypes = {
    title: node //数字、字符串、元素或包含这些类型的数组(或片段)。
    //title:element//react元素<MyComponent />
    //title:elementType//react元素类型MyComponent
    //title: instanceOf(Abc) //是否是Abc的实例
    // title: oneOf(['aaa', 'bbb']) //'aaa','bbb'中的第一个
    // title: oneOfType([//String类型和number类型中的一种
    //   string, 
    //   number
    // ])
    // title: arrayOf(number)//number类型的数组
    // title: shape({//传入的title参数有string类型的aaa和number类型的ddd
    //   aaa: string,//其中ddd是必须的,还可有别的属性
    //   ddd: number.isRequired
    // }),

    // title: exact({//精准匹配(和shape相比)
    //   abc: string,
    //   def: number.isRequired
    // }),

    // title(props, propName, componentName) {//对title进行自定义判断
    //   if (props.title.abc !== 'aaa') {//三个参数 属性 属性名 组件名
    //     throw new Error('你传的abc的值不正确')
    //   }
    // }
  }

  render() {
    return (
      <div>
        {this.props.children}
      </div>
    )
  }
}

export default Child;

Abc.js

export class Abc {
  render() {
    return 'abc'
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值