一、简单记录React的组件的简洁的生命周期API:

A:实例化期:

一个实例第一次被创建时所调用的API与其它后续实例被创建时所调用的API略有不同。

实例第一次被创建时会调用getDefaultProps,而后续实例创建时不会调用这个方法。

实例被创建时,依次被调用的API有:

getDefaultProps:

实例第一次被创建时才调用,对于组件类来说,它只调用一次。

这个方法返回的对象可为实例设置默认的props值。

getInitialState:

对于每个实例来说,这个方法只调用一次。每次创建实例时执行一次。

在这里初始化每个实例的state,在这里可以访问到this.props。

componentWillMount:

在首次渲染之前被调用,在渲染之前更改组件state的最后机会。

render:

组件的唯一必需方法。创建虚拟DOM,表示组件输出。

只能通过this.props和this.state访问数据。

可以return null,return false,或return 任何React组件。

只能有一个顶级组件。

不能改变组件状态,或修改DOM的输出。

(注,render返回的结果说虚拟DOM,React随后会把它和真实DOM做对比,来判断是否有必要做出修改)

componentDidMount:

render成功调用并且真实DOM也已经被渲染后,这个方法会调用。

在这里可以通过this.getDOMNode()方法访问真实的DOM。

例如需要测量DOM元素的宽度和高度等属性,可以在这个方法里做。

(注,React跑在Server端时,componentDidMount不会被调用)

B:存在期:

随着应用状态的改变,以下API依次被调用:

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

render

componentDidUpdate

C:销毁期:

组件被用完后,以下API被调用,给实例清理自身:

componentWillUnmount

注意反模式:

在getInitialState方法里,通过this.props来创建state的方法是一种反模式!

React专注于维护数据的单一来源,当组件的state值和它所基于的prop不同步时,是一种反模式!

反模式例子:

getDefaultProps: function() {

  return { date: new Date() }

};

getInitialState: function() {

  return {

    day: this.props.date.getDay()   // 不要在这里计算

  }

};

render: function() {

  return <div>Day is: {this.state.day}</div>;

};

正确的模式应该是在渲染时计算:(保证计算后的值不会与派生出它的props值不同步)

getDefaultProps: function() {

  return { date: new Date() }

};

render: function() {

  var day = this.props.date.getDay();  // 在渲染时做计算是正确的

  return <div>Day is: {day}</div>;

};

注意,组件可以用this.props访问props,但不能修改自己的props!

关于state:

每个组件都有自己的state。state和props区别在于state只存在于组件内部。

state用来确定一个元素的视图状态。

state可以用setState或replaceState来修改。(不能用this.state来修改state)

只要setState或replaceState被调用,render就会被调用。如果render返回值有变化,DOM就会被更新。

二、React的事件处理:

事件文档:http://facebook.github.io/react/docs/events.html

绑定一个事件处理器:

React.DOM.button({className:"btn", onClick: this.handleSendClick}, "Send");

触控事件需要调用这个方法来手动启动:React.initializeTouchEvents(true);

更新组件状态会触发组件重绘。

setState会更新某一个state属性,而replaceState会替换掉整个state对象。

在绑定的事件处理器里做setState:

getInitialState: function() {

  return { title: "Title 1.0" }

};

handlePageOnload: function(ev) {

  this.setState({title: "Title 2.0"});

  ev.preventDefault(); // 非必需,视情况而定

};

小结:更改state只能用setState或replaceState,因为它们可以通知React重绘DOM,即调用render方法

补充:关于处理input的onChange事件:

handleComplete: function(event) {

  this.callMethodOnProps("onCompleted", event.target.value);

};

render: function() {

  return <textarea onBlur="{this.handleComplete}"></textarea>

};

注意,使用event.target.value获取input值是一种常规方法。

React 组件的生命周期API和事件处理的更多相关文章

  1. 2. React组件的生命周期

    2. React组件的生命周期 使用React开发时候用到最多的就是React的组件了,通过继承React.Component,加入constructor构造函数,实现Render方法即可.这当中Re ...

  2. React 组件的生命周期方法

    React 组件的生命周期方法 按渲染顺序: 1: componentWillMount() – 在渲染之前执行,在客户端和服务器端都会执行. 2: componentDidMount() – 仅在第 ...

  3. react第三单元(react组件的生命周期)

    第三单元(react组件的生命周期) #课程目标 灵活掌握react组件的生命周期以及组件的活动过程. 能够灵活使用react的生命周期 #知识点 react的类组件的生命周期分为三个阶段 实例期 存 ...

  4. react 组件的生命周期 超简版

    组件从被创建到被销毁的过程称为组件的 生命周期: 通常,组件的生命周期可以被分为三个阶段:挂载阶段.更新阶段.卸载阶段: 一.挂载阶段 这个阶段组件被创建,执行初始化,并被挂载到DOM中,完成组件的第 ...

  5. react 组件的生命周期

    组件的生命周期 过程 装载(Mounting) :组件被插入到 DOM 中: 更新(Updating) :组件重新渲染以更新 DOM: 卸载(Unmounting) :组件从 DOM 中移除. 过程 ...

  6. React组件和生命周期简介

        React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库.为什么说它是颠覆式的呢? 内存维护虚拟 DOM 对于传统的 DOM 维护,我们的步骤可能是:1.初始化 ...

  7. 理解React组件的生命周期

    本文作者写作的时间较早,所以里面会出现很多的旧版ES5的时代的方法.不过,虽然如此并不影响读者理解组件的生命周期.反而是作者分为几种不同的触发机制来解释生命周期的各个方法,让读者更加容易理解涉及到的概 ...

  8. React: React组件的生命周期

    一.简介 在前面的第二篇博文中对组件的生命周期虽然做了一个大略介绍,但总感觉说的过于简单,毕竟生命周期是React组件的核心部分.在我们熟练使用React挂载和合成组件来创建应用表现层的过程中,针对数 ...

  9. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

随机推荐

  1. 在eclipse中建立子级源码文件夹

    在eclipse中建立子级源码文件夹 右键点击项目 ---->new ---->source folder--->输入 src/main  --->勾选update exclu ...

  2. Mac和iOS开发资源汇总—更新于2013-10-14

    小引本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D).今天(2013年10月14日)收录了answer哥(黄爱武)的博客,欢迎大家围观! 今天( ...

  3. 数据类型-Series

    数据类型-Series Series数据类型由一组数据和数据相关的索引组成,键 -> 值 Series数据类型可视为:一维 带标签 数组 Series基本操作类似数组和字典 Series数据类型 ...

  4. SciTE: 中文字符支持问题

    SciTE: 中文字符支持问题   SciTE(Scintilla Text Editor)是一个体积小巧的文本编辑器. 但是它默认的设置对中文字符处理不好,其实只要对它进行相应的配置,就可以了. 1 ...

  5. css样式表之边框

    方框和边框, 边框的顺序为, 上右下左 框的width和height不包括边距的宽度, 设置多少就是多少, margin代表外边距, padding代表内边距, border是边框, 边框border ...

  6. Django的mode的分组查询和聚合查询和F查询和Q查询

    1.聚合查询 # 聚合函数aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下 from django.db.models import Avg from django.db.mo ...

  7. XAMPP下apache部署网站,多个虚拟机(空间)配置

     之 前在 Mac 下一直使用 MAMP 搭建本地 php 环境,因为其强大的组合配置以及方便的 UI 操作.因为公司的电脑是 Windows 的,有时候需要搭建 php 环境来调试一些小东西方便自己 ...

  8. 解决mysql无法远程登陆问题

    解决这个问题的思路: 一.先确定能过3306端口 二.再检查授权Host是否存在 (新授权记得flush privileges;)   一 步骤 1.首先打开mysql的配置文件,找到这句话,注释掉. ...

  9. php多进程 防止出现僵尸进程

    对于用PHP进行多进程并发编程,不可避免要遇到僵尸进程的问题. 僵尸进程是指的父进程已经退出,而该进程dead之后没有进程接受,就成为僵尸进程(zombie)进程.任何进程在退出前(使用exit退出) ...

  10. springmvc使用数组接收页面商品列表批量删除传过来的参数,并完成批量删除的操作。

    1.1 需求 在商品列表页面选中多个商品,然后删除. 1.2 需求分析 此功能要求商品列表页面中的每个商品前有一个checkbox,选中多个商品后点击删除按钮把商品id传给controller,根据商 ...