React 对组件props限制 ( prop-types 依赖)

在 React 项目中对组件参数限制。

下载 prop-types 依赖包

	yarn add prop-types 或 npm i prop-types

	在模块中引入并使用 import PropTypes from 'prop-types'

在类组件中

推荐写法 ( 代码块统一 )

import React from "react";
import PropTypes from 'prop-types'; // 引入依赖

class Comp extends React.Component {
  // react 会解析 porpTypes 静态属性,首字母是小写p
  static propTypes = {
    name: PropTypes.string,  // 这里的 PropTypes 指 prop-types依赖,类型是小写
    age: PropTypes.number,  // 若类型不匹配,控制台会报 Warning
    hobby: PropTypes.array,
    gender: PropTypes.any,  // 任意类型
    say: PropTypes.func  // function 类型
  }

  // react 会解析 defaultProps 静态属性,props默认值
  static defaultProps = {
    msg: '你是个麻瓜'
  }

  render() {
    const { name, age, gender, hobby, say } = this.props
    return (
      <div>
        <ul>
          <h2>{this.props.msg}</h2>
          <button onClick={say}>click</button>
          <li>名字:{name}</li>
          <li>年龄:{age}</li>
          <li>性别:{gender}</li>
          <li>爱好:{hobby.map((item, index) => <span key={index}>{item}</span>)}</li>
        </ul>
      </div>
    )
  }
}

class App extends React.Component {
  state = {
    obj: {
      name: 'Piemon',
      age: 20,
      gender: '男',
      hobby: ['游戏', '学习', 'piano']
    }
  }
  say = () => {
    alert('i say')
  }
  render() {
    return (
      <div className="App">
        <Comp {...this.state.obj} say={this.say}></Comp>
      </div>
    )
  }
}

export default App

在这里插入图片描述


不推荐写法

class Comp extends React.Component {
  render() {
    const { name, age, gender, hobby, say } = this.props
    return (
      <div>
        <ul>
          <h2>{this.props.msg}</h2>
          <button onClick={say}>click</button>
          <li>名字:{name}</li>
          <li>年龄:{age}</li>
          <li>性别:{gender}</li>
          <li>爱好:{hobby.map((item, index) => <span key={index}>{item}</span>)}</li>
        </ul>
      </div>
    )
  }
}

Comp.propTypes = {
  name: PropTypes.string,
  age: PropTypes.number,
  hobby: PropTypes.array,
  gender: PropTypes.any,
  say: PropTypes.func
}

Comp.defaultProps = {
  msg: '你是个麻瓜'
}

在类组件中不推荐写在外部,建议写在组件内部,代码块统一,绿色环保,----------> 在函数组件中可写在外部


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值