React组件props校验

React组件props校验

首先说明以下为什么需要props校验,因为props是接受从父组件传过来得数据(接数据跟传数据不是一个人),但是数据类型没有明确得规定,那么有的时候我需要一个数组,你却给我普通数据,那么最终就会报错

1.首先安装prop-types

yarn add prop-types 或者 npm i prop-types -g

2.导入prop-types包
import PropTypes from 'prop-types'
3.最后一步使用组件名.propTypes={}给组件添加校验规则

外组件传来得数据 很明显得可以看到传入得props是个数组

render() {
    return (
      <div>
        我是父亲组件
        {this.props.children}
       <Home colors={[{name:'jack'},{name:'tom'}]} /> 
      </div>
    )
  }

接收的时候使用

import React, { Component } from 'react'
import { globalContext } from '../global'
import PropType from 'prop-types'

const { Consumer } = globalContext
export default class home extends Component {
  render() {
    let arr = this.props.colors  //接受数据
    let lis = arr.map((item, index) => {  //便利数据返回jsx
      return <li key={index}>{item.name}</li>
    })
    return (
      <div>
        <ul>{lis}</ul>  //渲染页面  下面的是跨组件传值 愿意了解的博客里有写
        <Consumer>{value => <button onClick={value.add}>+1</button>}</Consumer>
        <Consumer>{value => <button onClick={value.dice}>*2</button>}</Consumer>
        <Consumer>{value => value.num}</Consumer>
      </div>
    )
  }
}
home.propTypes={
  colors: PropType.number   //当我把传来的数据定义为数字类型时,由于前面传的是数组,因此就会报错
}

在这里插入图片描述
意思就是本来预期提供过来的colors类型是数字类型 但是传过来的是数组

把类型改成array就行了,或者在传过来时就是数字也行home.propTypes={ colors: PropType.array }

常用约束规则

  • array(数组) bool(布尔)func(方法)number(数字) object(对象) string(字符串) element(元素类型就是标签之类的)isRequired(必填项)例如 colors:PropTypes,string.isRequired 必填项 写法注意一下
  • 特定结构的对象:shape({})
home.propTypes = {   //prop类型限定校验
 colors: PropType.array,  //colors必须时数组
 num: PropType.shape({	//num:特定结构   特定结构必须含有sum。并且还必须是必填
   sum: PropType.string.isRequired    //如果没有这个属性就会报错
 })
}

大致意思就是sum这个属性必须是必填项 但是我的是undefined
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜鸟学代码··

给打赏的我会单独一对一讲解

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值