React系列:Props类型校验&默认值

1,821 阅读1分钟

一、props规则校验

1.安装 prop-types 包

$ npm install prop-types

2.导入 propTypes 对象

import propTypes from 'prop-types';

3.组件名.propTypes = {} 设置组件 传参规则

Comp.propTypes = {
   param: propTypes.array  // Comp组件 的 param 参数必须是 数组类型
}

示例:

import React from 'react';
// 导入 propTypes 对象
import PropTypes from "prop-types";

// 定义子组件
const Son = ({list}) => {
    return (
        <div>
            {list.map(item => <p key={item}>{item}</p>)}
        </div>
    )
}

// 组件名.propTypes = {} 给组件设置规则
Son.PropTypes={
    // 字段设置规则
    list: PropTypes.array // Son的list参数必须是 数组形式
}

const App = () => {
    return (
        <div>
            <Son list="胡莎"/>
        </div>
    )
}

export default App;

报错:

image.png

4.官方文档链接

官方文档链接:(PropTypes 进行类型检查)

四种常见结构

  • 常用类型:arraynumberboolstringfuncobjectsymbol
  • React元素类型:element
  • 必填项:isRequired
  • 特定的结构对象:shape({})
/* 
    属性num的类型    数值(number)
    属性fn的类型   函数(fun)并且为必填项
    属性tag的实现   React元素(element)
    属性filter的类型   对象({area:'上海',price:1999})
*/
App.propTypes={
  num:PropTypes.number,
  fn:PropTypes.fun.isRequired,
  tag:PropTypes.element,
  filter:PropTypes.shape({
    area:PropTypes.string,
    price:PropTypes.number
  })
}

二、props默认值

1. 函数式默认值

1.1 函数式默认值

示例:

import React from "react";

// 1. 函数参数默认值
function Son({defaultNumber = 666}) {
    return (
        <div>The number is : {defaultNumber}</div>
    )
}

const App = () => {
    return (
        <div>
            <Son />
        </div>
    )
}

export default App;

例图:

image.png

1.2. defaultProps 设置默认值

示例:

import React from "react";

function Son({defaultNumber}) {
    return (
        <div>The Number is: {defaultNumber}</div>
    )
}

// 2. defaultProps 设置默认值
Son.defaultProps = {
    defaultNumber: 1000
}

const App = () => {
     return (
       <div>
         <Son />
       </div>
   )
}
export default App;

例图:

image.png

2. 类式默认值

2.1 defaultProps

class Son extends React.Component {
    render() {
        return (
            <div>The defaultTimer is : {this.props.defaultTime}</div>
        )
    }
}

// defaultProps 设置默认值
Son.defaultProps = {
    defaultTime: 007
}

2.2 类静态属性声明

class Son extends React.Component {
    static defaultProps ={
        defaultTime: 66666
    }

    render() {
        return (
            <div>The defaultTimer is : {this.props.defaultTime}</div>
        )
    }
}