ReactJS入门2:组件状态
React组件可以简单看做是包含props和states的函数。
上一节总结了创建新组建和数据属性的传递。本节主要讲解组件的状态。
React认为UI是不同状态的展现。在React中,开发者只需更新组件的状态,然后根据此新状态呈现新的UI。在呈现新的UI时,React具有局部更新的特点,即:React只渲染有变化的部分。在介绍组件状态之前,先了解一下React局部刷新的特点。
1.React的局部刷新
var HelloWorld = React.createClass({
render: function() {
return (
<p>
Hello, <input type="text" placeholder="Your name here" />!
It is {this.props.date.toTimeString()}
</p>
);
}
});
//每隔500毫秒渲染一次组件
setInterval(function() {
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('content')
);
}, 500);
setInterval(function,time)方法用于设置计时器,作用是每隔time时间,会调用一次function。

在文本字段中如入您的姓名后,React只会更改UI中的时间字符串,而不会将输入的名字刷新掉。即:React渲染组件时,只对UI中发生变动的地方进行局部刷新。
2.使用state的情况
当需要响应用户输入、服务器请求或时间的推移时,需要为组件添加state,其它情况应保持组件的无状态。使尽可能多的组件处于无状态,这样可以将状态隔离到合理的位置,减少冗余,从而使代码更容易理解。(注意:局部刷新的例子中虽然有用户输入,但是并未作出响应,故没有添加state。)
3.为组件添加state
状态应包含组件的事件处理程序可能更改的数据,以触发UI更新。
var LikeButton = React.createClass({
getInitialState: function() {
return {liked: false};
},
handleClick: function(event) {
this.setState({liked: !this.state.liked});
},
render: function() {
var text = this.state.liked ;
return (
<p onClick={this.handleClick}>
The state is {text}. Click to toggle.
</p>
);
}
});
ReactDOM.render(
<LikeButton />,
document.getElementById('content')
);
1.getInitialState() 用于定义初始状态。可以通过this.state获 取。
2.事件handleClick()用于修改组件的状态。this.setState()方法用来修改状态值。
3.在render()的内部根据这个状态作出相应。每次更新状态后,自动调用this.render()方法重新渲染组件。
触发事件前:

触发事件后:

4.复合组件
创建复合组件的目的:通过构建新组件分离不同的问题。
针对复合组件,React定义了一种新的关系:从属关系(owner-ownee);owner指调用其它组件的组件,ownee指被调用的组件。区别于父子关系,从属关系是 React 特有的,而父子关系简单来讲就是DOM 里的标签的关系。
注意:为了保持UI的一致性,ownee不能修改props的值,必须和owner设置的值一致。即:值的修改必须放在owner中。
//owner
var CommentBox = React.createClass({
render : function(){
return (<div>
<p>I am a box.</p>
<CommentList author={this.props.author} />
</div>);
}
});
//ownee
var CommentList = React.createClass({
render : function(){
return (<div>The author is {this.props.author}.</div>);
}
}); ReactDOM.render(
<CommentBox author='wei.hu' />,
document.getElementById('content')
);

5.组件策略
常见的一种模式是“一个有状态的组件+多个无状态的组件”。有状态的组件封装了所有的交互逻辑,而无状态组件以声明的方式处理渲染数据。
未完,待续。
更多内容,请访问:http://www.cnblogs.com/BlueStarWei/
ReactJS入门2:组件状态的更多相关文章
- ReactJS入门3:组件的生命周期
本文主要介绍组件的生命周期. 组建的生命周期主要分为3个:Mounting.Updating.Unmounting. 1. Mounting:组件被加载到DOM 在本阶段,主要有三个方法: 1 ...
- Flutter入门之有状态组件
StatefulComponent使用方法入门 在上一篇Flutter入门之无状态组件中我们讲到了无状态组件,所谓的无状态组件指的就是其内部的状态是来自其父组件并使用final类型的变量来存储,当组件 ...
- 一看就懂的ReactJs入门教程-精华版
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- ReactJS入门指南
ReactJS入门指南 本文旨在介绍ReactJS的基本知识,并一步步详细介绍React的基本概念和使用方法等,以及相应的Demo.本文在很大程度上参考了React官方文档和官方指南.如果你英语还不错 ...
- ReactJs入门教程
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- ReactJS入门学习一
ReactJS入门学习一 阅读目录 React是什么? React如何制作组件? 理解组件属性props 理解页面中如何渲染数据的 理解从服务器端获取数据及理解state的 回到顶部 React是什么 ...
- 一看就懂的ReactJs入门教程(精华版)
一看就懂的ReactJs入门教程(精华版) 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和 ...
- [转]ReactJS入门教程
Refference From:http://www.cocoachina.com/webapp/20150721/12692.html 现在最热门的前端框架有AngularJS.React.Boot ...
随机推荐
- Python简单爬虫记录
为了避免自己忘了Python的爬虫相关知识和流程,下面简单的记录一下爬虫的基本要求和编程问题!! 简单了解了一下,爬虫的方法很多,我简单的使用了已经做好的库requests来获取网页信息和Beauti ...
- Codeforces 506E Mr. Kitayuta's Gift (矩阵乘法,动态规划)
描述: 给出一个单词,在单词中插入若干字符使其为回文串,求回文串的个数(|s|<=200,n<=10^9) 这道题超神奇,不可多得的一道好题 首先可以搞出一个dp[l][r][i]表示回文 ...
- Redis【第一篇】安装
第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. redis 版本 redis-3.2.8 3. 修改内核参数 有三种方式: 1)编辑/etc/sys ...
- 【Zookeeper】源码分析之请求处理链(四)
一.前言 前面分析了SyncReqeustProcessor,接着分析请求处理链中最后的一个处理器FinalRequestProcessor. 二.FinalRequestProcessor源码分析 ...
- Linux配置JDK
在etc/profile文件下添加 export JAVA_HOME=/root/Desktop/jdk1.7.0_79 export CLASSPATH=/root/Desktop/jdk1.7.0 ...
- 写好你的JavaScript
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 在实际工作中,我们应该经常会看到一些功能上没有问题,但编码风格和规范却十分糟糕的代码,这往往会让人不 ...
- Redis安装以及基本数据类型
安装 1.阿里云CentOS 1.进入到centos系统,输入wget http://download.redis.io/releases/redis-3.2.8.tar.gz ,下载好目前最新版的R ...
- NSTimer定时器进阶——详细介绍,循环引用分析与解决
引言 定时器:A timer waits until a certain time interval has elapsed and then fires, sending a specified m ...
- 令人眼前一亮的下拉式终端 Tilda & Guake
前言 老夫是 Linux 的老用户. 大一的时候某不方便透露姓名的校内组织给了一个 Fedora 13 的安装光盘,然后老夫学会了重装 Windows. 大二的时候知道了 Ubuntu ,开始在虚拟机 ...
- GridView应用随笔
1. 数据绑定 GridView可以使用数据源控件和设置控件的DataSource属性来绑定数据,这里主要讲设置DataSource属性来绑定. 1.写一个返回值为DataSet或者DataTable ...