props校验

158 阅读1分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

一.目的:

校验接收的props的数据类型,增加组件的健壮性

对于组件来说,props是外来的,无法保证组件使用者传入什么格式的数据

如果传入的数据格式不对,可能会导致组件内部报错。组件的使用者不能很明确的知道错误的原因。

props校验允许在创建组件的时候,就约定props的格式、类型等

二.使用

1.下包

yarn add prop-types

2.父传值

import React from 'react'
import Son3 from './props/son3'
class Com extends React.Component {
  state={
    pp2:'',
    pp3:'',
    pp4:'',
    pp5:0,
  }
  render() {
    return (
    <div>
      <Son3 p1={'1'}
       p2={this.state.pp2}
       p3={this.state.pp3}
       p4={this.state.pp4}
       p5={this.state.pp5}
      ></Son3>
  </div>
    )
  }
}
export default Com

3.使用组件名.propTypes = {} 来给组件的props添加校验规则,并通过 PropTypes 对象来指定

  1. 常见类型:array、bool、func、number、object、string
  2. 默认值:defaultProps
  3. 必填项:isRequired
  4. 特定结构的对象:shape({})

(1)常见类型

import React from 'react'
import PropTypes from 'prop-types'
class Com extends React.Component {
  render() {
    return <div>
      <span>=={this.props.p1}==
      {this.props.p2}==
      {this.props.p3}==
      {this.props.p4}==
      {this.props.p5}==</span>
    </div>
  }
}
Com.propTypes={
  p1:PropTypes.func,
  p2:PropTypes.array,
  p3:PropTypes.number,
  p4:PropTypes.bool,
  p5:PropTypes.string,
}
export default Com

报错

image.png

看这整整齐齐的报错,是不是爽的飞起

处理起来也很容易,按规则传即可

  state={
    pp2:[], 
    pp3:0,
    pp4:false,
    pp5:'',
  } 
  ...
   <Son3 p1={()=>{}}
  ...

(2)默认值:defaultProps

上面常规类型传值其实不传也不会报错,为了解决该问题可设置默认值来解决不传问题

Com.defaultProps={
      pp2:[], 
    pp3:0,
    pp4:false,
    pp5:''
}

(3)必填项:isRequired

上面常规类型传值其实不传也不会报错,可使用必填项isRequired,设置的值不填就报错

Com.propTypes={
  p5:PropTypes.string.isRequired,
}

image.png

(4)指定对象

Com.propTypes={
    p6:PropTypes.shape({
    color:PropTypes.number
  })
}
父
  state={
    pp6:'',
  } 
  ...
      <Son3 
       p6={this.state.pp6}
      ></Son3>

报错信息

image.png