赞助

对于组件来说,props是外部传入的,无法保证组件使用者传入什么格式的数据,简单来说就是组件调用者可能不知道组件封装着需要什么样的数据,如果传入的数据不对,可能会导致程序异常,所以必须要对于props传入的数据类型进行校验。

安装校验包 

npm i -S prop-types

 

 

# 在组件中导入

import PropTypes from 'prop-types'

 

# 函数组件

function App(){}

// 验证规则

App.propTypes = {

    prop-name:PropTypes.string

}

 

# 类组件

class App extends Component{

    // 类内部完成 检查

static propTypes = {

   prop-name:PropTypes.string

}

}

 

² 约束类型

https://zh-hans.reactjs.org/docs/typechecking-with-proptypes.html#proptypes

- 类型: arrayboolfuncnumberobjectstring

- React元素类型:element

- 必填项:isRequired

- 特定结构的对象: shape({})

父组件

import React, { Component } from 'react'
import Cmp2fun from './pages/Cmp2fun'
import Cmp2class from './pages/Cmp2class'

export default class App extends Component {
  render() {
    return (
      <div>
        {/* props.children 获取组件内中的数据 插槽 slot */}
        {/* <Cmp2fun a={1} b={2} /> */}
        {/* 默认值 如要传入值,则传入的值为主,默认值为辅 */}
        <Cmp2fun a={1} />
        <Cmp2class a={1} b={2} />

      </div>
    )
  }
}

 

函数组件

import React from 'react';
// 引入proptypes类型检查
import PropTypes from 'prop-types';

// 函数组件
const Cmp2fun = ({ a, b }) => {

  console.log(a + b);

  return (
    <div>

    </div>
  );
}

// 类型检查
Cmp2fun.propTypes = {
  a: PropTypes.number,
  b: PropTypes.number
}

// 默认值
Cmp2fun.defaultProps = {
  b: 1000
}

export default Cmp2fun;

类组件

import React, { Component } from 'react'

// 引入proptypes类型检查
import PropTypes from 'prop-types';

export default class Cmp2class extends Component {

  // 静态方法不能使用this 静态方法属于类的 调用 类.方法名/属性名
  static propTypes = {
    // 类型前面是数字且还是必须填写输入的
    a: PropTypes.number.isRequired,
    b: PropTypes.number
  }
  // 给props添加默认值
  static defaultProps = {
    b: 100
  }

  render() {
    let { a, b } = this.props
    console.log(a + b);
    return (
      <div>

      </div>
    )
  }
}

// 类型检查
/* Cmp2class.propTypes = {
  a: PropTypes.number,
  b: PropTypes.number
} */

// export default Cmp2class

 

posted on 2021-04-16 16:37  Tsunami黄嵩粟  阅读(304)  评论(0编辑  收藏  举报