React学习笔记 - 组件&Props
React Learn Note 4
React学习笔记(四)
标签(空格分隔): React JavaScript
三、组件&Props
组件可以将UI切分成一些独立的、可复用的部件,这样你就只需专注于构建每一个单独的部件。
组件接收props,返回react元素。
1. 函数定义\类定义组件
最简单组件方式 - 函数定义组件:
// 函数定义组件
function Welcome(props) {
return <h1>Hello, {props.name}!</h1>;
}
ES6 class定义组件,效果同上:
// ES6 class定义组件
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
2. 组件渲染
将组件作为React元素,标签的属性作为props键值:
const element5_1 = <Welcome name="Sara"></Welcome>;
ReactDOM.render(
element5_1,
document.getElementById('root5')
);
**警告:**
组件名称必须大写字母开头。
3. 组合组件
React组件也可以嵌套。
function App() {
return (
<div>
<Welcome name="Bob"></Welcome>
<Welcome name="Cahal"></Welcome>
<Welcome name="John"></Welcome>
</div>
);
}
ReactDOM.render(
<App></App>,
document.getElementById('root6')
);

**警告:**
组件的返回值只能有一个根元素。所以将多个`Welcome`元素用`div`包裹。
4. 提取组件
可以将组件切分为更小的组件。
function formatDate(date) {
return date.toLocaleTimeString();
}
function Comment(props) {
return (
<div className="Comment">
<div className="UserInfo">
<img src={props.author.avatarUrl} alt={props.author.name}/>
<div className="UserInfo-name">
{props.author.name}
</div>
</div>
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
ReactDOM.render(
<Comment author={{avatarUrl: '../static/img/zhifibao_key.jpg', name: 'Jessie'}} text="This is comment text." date={new Date()}></Comment>,
document.getElementById('root7')
);

这个组件接收author(对象)、text(字符串)、以及date(Date对象)作为props。是个复杂的组件。接下来我们提取拆分这个组件。
首先提取Avatar组件:
// 提取组件
function Avatar(props) {
return (
<img src={props.user.avatarUrl} alt={props.user.name} className="Avatar"/>
);
}
function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user}></Avatar>
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
);
}
// 最终Comment组件被简化为
function Comment2(props) {
return (
<div className="Comment">
<UserInfo user={props.author}></UserInfo>
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
ReactDOM.render(
<Comment2 author={{avatarUrl: '../static/img/zhifibao_key.jpg', name: 'Xiaoyu Lee'}} text="Wow, this is very beautiful." date={new Date()}></Comment2>,
document.getElementById('root8')
);
5. Props的只读性
无论是使用函数或是类来声明一个组件,它决不能修改它自己的props。
The end... Last updated by: Jehorn, Jan 07, 2018, 5:44 PM
React学习笔记 - 组件&Props的更多相关文章
- React学习笔记-04 props
props实现从父组件与子组件的通信. 可以通过getDefaultProps初始化props. React 提供了propsTypes来验证props的类型 官方API: propTypes:fun ...
- 【React】react学习笔记02-面向组件编程
react学习笔记02-面向组件编程 面向组件编程,直白来说,就是定义组件,使用组件. 以下内容则简单介绍下组建的声明与使用,直接复制demo观测结果即可. 步骤: 1.定义组件 a.轻量组件-函 ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- React学习笔记(一)- 入门笔记
React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
- React学习笔记(六)事件处理
React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...
- React学习笔记(五)State&声明周期
React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
随机推荐
- HDU - 4825 01字典树套路题
/*H E A D*/ struct Trie{ int son[maxn<<2][2]; int b[67],tot; void init(){ // memset(son,0,size ...
- POJ - 1845 简单数论
求A^B的约数和模MOD 对A质因子分解P1^k1*P2^k2....P^kn A^B既指数对应部分乘以B 对于每个P都有(1+P^1+P^2+...+P^ki)的选择 连乘每一个P的等比数列之和即可 ...
- 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表
1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...
- Android报错
Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process. ...
- ELK 搭建实战
一, 软件介绍 01,为什么用到ELK? 一般我们需要进行日志分析场景:直接在日志文件中 grep.awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大 如何 ...
- 使用SVN进行源码管理
阅读目录: 1.SVN服务端配置 1.1 创建版本库 1.2 创建用户 1.3 设置用户权限 2.SVN客户端使用 2.1 向SVN服务器中导入源码 2.1.1 直接通过TortoiseSVN向SVN ...
- 在CentOS 7上搭建私有Docker仓库
Hub IP:10.0.2.6 操作系统:CentOS 7 64位 Docker版本:1.12.5Client IP:10.0.2.4 操作系统:CentOS 7 64位 Docker版本:1.12. ...
- 第一章:hybrid app开发之技术选型
伴随着移动互联网的兴起,越来越多的企业将部分资源投入其中,想在互联网+的大潮中分一杯羹,并期望着站在风口上,成为时代的弄潮儿. 现在不会做一个app都不好意思说是搞互联网的,那么开发一个app的方式有 ...
- CentOS 6.5 安装MySQL数据库
CentOS 6.5 安装MySQL数据库 [root@seeker~]# yum -y install mysql-server //安装命令 [root@seeker~]# service mys ...
- Struts2中Action对象的set方法和get方法调用规则
Struts的Action是采用的是多实例多线程设计,而不是像Servlet那样采用单实例多线程设计,因此在struts中,一个请求就对应一个Action对象,个对象之间的数据相互之间互不干扰.没接到 ...