React组件三大属性之 props
React组件三大属性之 props
理解
1)	每个组件对象都会有props(properties的简写)属性
2)	组件标签的所有属性都保存在props中
作用
1)	通过标签属性从组件外向组件内传递变化的数据
2)	注意: 组件内部不要修改props数据
编码操作
1)	内部读取某个属性值
	this.props.propertyName
2)	对props中的属性值进行类型限制和必要性限制
	Person.propTypes = {
	name: React.PropTypes.string.isRequired,
	age: React.PropTypes.number.isRequired
	}
3)	扩展属性: 将对象的所有属性通过props传递
	<Person {...person}/>
4)	默认属性值
	Person.defaultProps = {
	name: 'Mary'
	}
5)	组件类的构造函数
	constructor (props) {
	super(props)
	console.log(props) // 查看所有属性
	}
问题: 请区别一下组件的props和state属性
1)	state: 组件自身内部可变化的数据
2)	props: 从组件外部向组件内部传递数据, 组件内部只读不修改
例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../js/react.development.js"></script>
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
<script src="../js/prop-types.js"></script>
</head>
<body>
<div id="test1"></div>
<hr>
<div id="test2"></div>
<script type="text/babel">
/*
需求: 自定义用来显示一个人员信息的组件, 效果如页面. 说明
1). 如果性别没有指定, 默认为男
2). 如果年龄没有指定, 默认为18
*/
//1、定义组件
function Person(props) {
return (
<ul>
<li>姓名: {props.name}</li>
<li>性别: {props.sex}</li>
<li>年龄: {props.age}</li>
</ul>
)
} // 指定属性的默认值
Person.defaultProps = {
sex: '男',
age: 18
} //指定属性值和类型的必要性
Person.propTypes={
name: PropTypes.string.isRequired,
age: PropTypes.number
} //定义一个person
const person = {
name: 'Tom',
sex: '女',
age: 18
} const person2 = {
name: 'jack'
} //2、渲染组件标签
ReactDOM.render(<Person {...person}/>,document.getElementById('test1'))
ReactDOM.render(<Person name={person2.name} />,document.getElementById('test2')) </script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../js/react.development.js"></script>
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
<script src="../js/prop-types.js"></script>
</head>
<body>
<div id="test1"></div>
<hr>
<div id="test2"></div>
<script type="text/babel">
/*
需求: 自定义用来显示一个人员信息的组件, 效果如页面. 说明
1). 如果性别没有指定, 默认为男
2). 如果年龄没有指定, 默认为18
*/
//1、定义组件
class Person extends React.Component {
render() {
console.log(this)
return (
<ul>
<li>姓名: {this.props.name}</li>
<li>性别: {this.props.sex}</li>
<li>年龄: {this.props.age}</li>
</ul>
)
}
} // 指定属性的默认值
Person.defaultProps = {
sex: '男',
age: 18
} // 对标签属性进行限制
Person.propTypes = {
name: PropTypes.string.isRequired,
sex: PropTypes.string,
age: PropTypes.number
} //定义一个person
const person = {
name: 'Tom',
sex: '女',
age: 18
} const person2 = {
name: 'jack'
} //2、渲染组件标签
ReactDOM.render(<Person {...person}/>,document.getElementById('test1'))
ReactDOM.render(<Person name={person2.name} />,document.getElementById('test2')) </script>
</body>
</html>
React组件三大属性之 props的更多相关文章
- React组件三大属性之 refs
		React组件三大属性之 refs refs属性 1) 组件内的标签都可以定义ref属性来标识自己 a. <input type="text" ref={input => ... 
- React组件三大属性之state
		React组件三大属性之state 组件被称为"状态机", 页面的显示是根据组件的state属性的数据来显示 理解1) state是组件对象最重要的属性, 值是对象(可以包含多个数 ... 
- react的三大属性
		react的三大属性 state props refs props 来自外部属性 states 来自内部状态 refs 用于表示组件内某个元素 state基础(最重要的属性) state是组件对象最 ... 
- React 三大属性state,props,refs以及组件嵌套的应用
		React 三大属性state,props,refs以及组件嵌套的应用 该项目实现了一个简单的表单输入添加列表的内容 代码如下 <!DOCTYPE html> <html> & ... 
- React组件的属性
		组件的三大属性 state props refs 写组件的要求: 1>组件必须大写 2>组件必须只有一个根元素 state是组件的重要对象 值可以是对象 组件被称之为 状态机 通过跟新组件 ... 
- React组件的state和props
		React组件的state和props React的数据是自顶向下单向流动的,即从父组件到子组件中,组件的数据存储在props和state中.实际上在任何应用中,数据都是必不可少的,我们需要直接的改变 ... 
- 08_组件三大属性(2)_props
		<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ... 
- 09_组件三大属性(3)_refs和事件处理
		<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- 07_组件三大属性(1)_state
		<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
随机推荐
- TensorRT-优化-原理
			TensorRT-优化-原理 一.优化方式 TentsorRT 优化方式: TensorRT优化方法主要有以下几种方式,最主要的是前面两种. 层间融合或张量融合(Layer & Tensor ... 
- TinyML-TVM是如何驯服Tiny的(上)
			TinyML-TVM是如何驯服Tiny的(上) 低成本.人工智能驱动的消费类设备的激增,导致了ML研究人员和从业者对"裸智能"(低功耗,通常没有操作系统)设备的广泛兴趣.虽然专家已 ... 
- Lombok——一款Java构建工具,“懒人”必备!!(idea版)
			一.简介 Lombok 是一种 Jav 构建工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(POJO).它是通过注解实现这一目的. 二.使用 1.在idea中安装 ... 
- 【NX二次开发】 删除面操作
			录制修改封装删除面 DeleteFaces 1 #include <uf_defs.h> 2 #include <NXOpen/NXException.hxx> 3 #incl ... 
- Redission加锁解锁流程
			redission分布式锁的使用 RLock lock = redissonClient.getLock("myLock"); lock.lock(); try { System. ... 
- .NET Core/.NET5/.NET6 开源项目汇总4:CMS、Blog项目
			系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ... 
- Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理
			我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 Spring Cloud Data Flow整合UAA的文章已经写了两篇,之前的方案是把用户信息保存在数据库中: ... 
- YOLO V4的模型训练
			1.YOLO V4模型训练的基本思路 所有机器学习涉及模型训练,一般都有训练集.验证集.测试集,因此需要准备数据集.有了数据集,再调用训练的算法,获取训练的结果.v3.v4模型训练方法相同. 2.YO ... 
- SpringCloud-OAuth2(四):改造篇
			本片主要讲SpringCloud Oauth2篇的实战改造,如动态权限.集成JWT.更改默认url.数据库加载client信息等改造. 同时,这应该也是我这系列博客的完结篇. 关于Oauth2,我也想 ... 
- kubelet分析-csi driver注册分析-Node Driver Registrar源码分析
			kubernetes ceph-csi分析目录导航 Node Driver Registrar分析 node-driver-registrar是一个sidecar容器,通过Kubelet的插件注册机制 ... 
