对于组件来说,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

- 类型: array、bool、func、number、object、string

- 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

react props-type的更多相关文章

  1. react Props 验证 propTypes,

    <body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...

  2. React props传变量

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  3. react篇章-React Props

    state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变.这就是为什么有些容器组件需要定义 state 来更新和修改数据. 而子组件只能通过 pro ...

  4. React——props的使用以及propTypes

    组件的props是只读的,组件不能修改自己的props,在React中,组件可以接受任意的props,如函数,对象,基本类型以及react元素 一.props的使用 1.一些组件并不需要知道自己的ch ...

  5. react~props和state的介绍与使用

    props是参数的传递,从上层模块向下层模块进行拿传递:而state是提局域变量,一般在本模块内使用,props是不能改变的,而state可以通过setState去修改自身的值. props Reac ...

  6. react props与render成员函数

    props是组件固有的属性集合,其数据由外部传入,一般在整个组件的生命周期中都是只读的,React的API顶层设计也决定了这一点.属性初值通常由React.createElement函数或者JSX中标 ...

  7. React props

    class WebSite extends React.Component { constructor() { super(); this.state = { name: "菜鸟教程&quo ...

  8. [Recompose] Make Reusable React Props Streams with Lenses

    If you hard-code a stream of props to target a specific prop, it becomes impossible to reuse that st ...

  9. 九、React中的组件、父子组件、React props父组件给子组件传值、子组件给父组件传值、父组件中通过refs获取子组件属性和方法

    一.概述 React中的组件: 解决html 标签构建应用的不足. 使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入. [父子组件]:组件的相互调用中,我们把调用者称为父 ...

  10. [Recompose] Compose Streams of React Props with Recompose’s compose and RxJS

    Functions created with mapPropsStream canned be composed together to build up powerful streams. Brin ...

随机推荐

  1. uni-app上传图片和文件

    如图所示: 上传图片,使用的是uni.chooseImage这个官方api,count 数量根据自己的需求来,我们是最多只能上传9张 uploadImgEvent(){ uni.chooseImage ...

  2. DC-1渗透靶场实战速通版

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 文章为速通 ...

  3. 暑期集训 Day10 —— 模拟赛复盘

    ${\color{Green} \mathrm{Problem\ 0 :water }} $ 题如其名,可以用单调队列做,但是数据范围直接暴力枚举每一高度就行. 最不会打错的,还是暴力,所以用暴力. ...

  4. ESXI 6.5 零基础从安装到批量生成/管理虚拟机简易教程

    制造U盘安装盘 1 先提前下载好,ESXI 6.5 ISO文件. 2 下载制作U盘安装工具,RUFUS. Rufus非常小巧的绿色EXE文件,默认配置选中ISO文件就可以,点击开始,就自动制作,非常方 ...

  5. 大型企业数据库服务首选,AliSQL这几大企业级功能你了解几个?

    MySQL代表了开源数据库的快速发展,从2004年前后的Wiki.WordPress等轻量级Web 2.0应用起步,到2010年阿里巴巴在电商及支付场景大规模使用MySQL数据库,再到2012年开始阿 ...

  6. [Trading] 专业交易: 专业交易员和散户交易员的不同, 什么是专业交易员

    专业交易员可能用的是公司的钱或者自己的钱 有基本工资支持,散户用的是自己的钱 没有人提供工资来做交易. 目标不同,专业交易员的目的是增长投资账户和获得奖金,散户大部分是为了提取盈利收入而无法增长投资账 ...

  7. 21.3K star!推荐一款可视化自动化测试/爬虫/数据采集神器!功能免费且强大!

    大家好,我是狂师! 在大数据时代,信息的获取与分析变得尤为重要.对于开发者.数据分析师乃至非技术人员来说,能够高效地采集网络数据并进行分析是一个强有力的工具.今天,我要向大家推荐的是一款功能强大.操作 ...

  8. Win10下小米路由器4A百兆版刷Openwrt固件【图片详细版】

    将原来的小米路由器换成了华为,早就听闻刷软路由可以实现去广告,解锁灰色歌单等诸多骚操作.就来榨取这个小米4A的剩余价值来着的. 注意 1. 必须使用路由模式,中继模式是打不开telnet的 更新固件 ...

  9. DbHelperSQL

    using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...

  10. WebGL实现简易的局部“马赛克”

    前言 接触过Canvas的小伙伴应该都知道,在Canvas2D中我们要加载一个图片很简单,通过调用drawImage API就能将图像绘制到画布上,当然在WebGL中我们也可以绘制图像,在绘制时我们需 ...