react学习笔记(5) - 类组件中的属性(props)
React
学习笔记(5) - 类组件中的属性(props
)
React
中的属性(props
)与Vue
中的父子组件间通信(props
)非常的相似,使用方法也非常的相似,都是通过在父组件
中调用子组件
,随后在父组件
中,通过key="value"
或者key={value}
的方式将属性(props
)传给子组件,随后子组件再通过this.props
来接受父组件传过来的属性。但是,props
是正常是外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更改,也就是说,你可以认为在子组件中,父组件传过来的属性(props
)是只读的(readonly
),子组件不能更改这个属性,但你可以通过父组件主动重新渲染的方式来传入新的props
,属性
是描述性质、特点的,组件自己不能随意更改。
代码展示:
- 父组件
import React, { Component } from 'react' |
- 子组件
import React, { Component } from 'react' |
结果展示:
属性验证
- 为了验证传递进来的数据是否符合我们期望的类型或者要求,
React
提供了PropTypes
这个对象用于校验属性的类型,就拿上面的例子来讲,如果上面的父组件给子组件传布尔值的时候,不小心没有使用key={true}
,而是使用key="true"
,这就会导致子组件接收到的key
是一个字符串而并非一个布尔值,这时我们就可以使用属性验证
来验证一下我们从父组件
中接收到的props
是否为我们期望的类型。
proptypes
可以校验的组件类型的属性类型表:
类型 | propTypes对应的属性 |
---|---|
String(判断是否为字符串型 ) |
propTypes.string |
Number(判断是否为数值型 ) |
propTypes.number |
Boolean(判断是否为布尔型 ) |
propTypes.bool |
Function(判断是否为函数型 ) |
propTypes.func |
Object(判断是否为对象 ) |
propTypes.object |
Array(判断是否为数组 ) |
propTypes.array |
Symbol(判读是否为symbol ) |
propTypes.symbol |
Element(React元素) | propTypes.element |
Node 可被渲染的节点,数字,字符串,React元素或者由这些类型的数据组成的数组) | propTypes.node |
使用需求:
- 安装
propTypes
库
npm i prop-types --save |
- 在子组件中引入
prop-type
//1. 引入验证库 |
- 添加属性验证(两种方法)
/* |
代码展示:
- 父组件
import React, { Component } from 'react' |
- 子组件接收
import React, { Component } from 'react' |
结果展示:
默认属性
defaultProps
(默认属性值) 可以为Class
组件添加默认props
。这一般用于props
未赋值,但又不能为null
的情况- 注意:
defaultProps
是Class
的属性,也就是静态属性,不是组件实例对象的属性,且在同时有prop-types
验证和defaultProps
默认属性值时 ,会先处理defaultProps
默认属性值,所以即使用户没有输入必传字段,设置了defaultProps
默认属性值也不会报错(类型要对应)。
两种写法
// 定义默认属性值方法1,直接在类组件内部定义,这种方法推荐使用 |
代码展示:
- 父组件
import React, { Component } from 'react' |
- 子组件
import React, { Component } from 'react' |
结果展示:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库