最近兄弟团队让我去帮忙优化两个页面,前端用的react全家桶,后端用的python,上一次写react代码都过去一年了,顺着以前的的学习思路,再捋顺一下react的要点

组件的生命周期就是Reac的工作过程,就好比人有生老病死,自然界有日月更替,每个组件在网页中也会有被创建、更新和删除,如同有声明的机体一样

   ----《深入浅出react和redux》程墨

React的生命周期可以分为三个过程

装载过程(mont),就是组件在第一次在DOM树中渲染的过程

更新过程(update),组件被重新渲染的过程

卸载过程(unmount),组件从DOM中被移除的过程

一 、装载过程

依次调用如下过程   constructor、getInitialState、getDefaultProps、componentWillMont、render、componentDIdMount

  1、constructor    

  就是Es6里的构造函数,创建一个组件类的实例,在这一过程中我们要进行两步操作:初始化state,绑定成员函数的this环境

  2、getInitialState和getDefaultProps

  这个两个过程可以不去深究,只会在用到React.createClass方法创造的组件类才会发生作用,所以在es6的方法定义的React组件中根本不会用到

  3、render

  不夸张的说render是React组件中最为重要的一个函数。这个react中唯一不可忽略的函数,在render函数中,只能有一个父元素。

  其中需要深入分析的是:render函数是一个纯函数,他并不进行实际上的渲染动作,他只是一个JSX描述的结构,最终是由React来进行渲染过程,render函数中不应该有任何操作,对页面的描述完全取决于this.state和this.props的返回结果,不能在render调用this.setState

     有一个公式总结的非常形象     UI=render(data)

  4、componenWillMonunt和componentDidMount

  这两个函数分别在render前后执行,componentWillMonut显得有些鸡肋,还没有任何东西展示,操作完全可以提前到constructor中来进行

  但是componentDidMount函数作用就大得多,由于这一过程通常只能在浏览器端调用,所以我们在这里获取异步数据,而且在componentDidMount调用的时候,组件已经被装载到DOM树上了,还有,可以在这里执行其他库的代码,比如Jquery(很皮~)

  

二、更新过程

简单来说就是props和state被修改的过程,依次调用compWillReceiveProps、shouldComponentUpdate、componentWillUpdate、render、componentDidUpdate

  1、componentWillReceiveProps(nextProps)

  并不是只有在props发生改变的时候才会被调用,实际上只要是父组件的render函数被调用,render里面被渲染的子组件就会被更新,不管父组件传给子组件的props有没有被改变,都会触发子组件的componentWillReceiveProps过程,但是,this.setState方法的触发过程不会调用这个函数,因为这个函数适合根据新的props的值来计算出是不是要更新内部状态的state。

  2、shouldComponentUpdate(nextProps, nextState)

  这个函数的重要性,仅次于render,稳坐第二把交椅,render函数决定了改渲染什么,而shouldComponentUpdate决定了不需要渲染什么,这两位大佬都需要返回函数,这一过程可以提高性能,忽略掉没有必要重新渲染的过程

  3、componentWillUpdate和componentDidUpdate

  和装载过程不同,这里的componentDidUpdate,既可以在浏览器端执行,也可以在服务器端执行

三、卸载过程

这里感觉没啥好说的,实际中也很少用到,这里只有一个componentWillUnmount,我最开始还很敏锐的发现,前两个过程都有will和DId俩个方法,怎么到这里就只有Will了,后来仔细一想,连dom都已经删除掉了,你还did干啥。。。哈哈

在非父子组件传值得时候,在这里取消订阅事件

  

生命周期对照表

参考资料

   《深入浅出react和redux》程墨

  react入门实例-阮一峰

     组件生命周期|react入门教程

  React:组件的生命周期

  

react(一):组件的生命周期的更多相关文章

  1. reactjs入门到实战(七)---- React的组件的生命周期

    React的组件的生命周期有三个状态分别是:挂载(生产组件示例化.准备挂载到页面.挂载到页面).更新(更新值.更新DOM).和卸载(卸载后). >>>其他     getInitia ...

  2. react native组件的生命周期

    react native组件的生命周期 一.当页面第一次加载时,会依次调用: constructor() componentWillMount(): 这个函数调用时机是在组件创建,并初始化了状态之后, ...

  3. Android React Native组件的生命周期及回调函数

    熟悉android的童鞋应该都清楚,android是有生命周期的,其很多组件也是有生命周期.今天小编和大家分享的React Native组件的生命周期,还不了解的童鞋,赶紧来围观吧 在android开 ...

  4. 【RN - 基础】之React Native组件的生命周期

    下图描述了React Native中组件的生命周期: 从上图中可以看到,React Native组件的生命周期可以分为初始化阶段.存在阶段和销毁阶段. 实例化阶段 实例化阶段是React Native ...

  5. React Native组件、生命周期及属性传值props详解

    创建组件的三种方式 第一种:通过ES6的方式创建 /** * 方式一 :ES6 */ export default class HelloComponent extends Component { r ...

  6. React:组件的生命周期

    在组件的整个生命周期中,随着该组件的props或者state发生改变,其DOM表现也会有相应的变化.一个组件就是一个状态机,对于特定地输入,它总返回一致的输出. 一个React组件的生命周期分为三个部 ...

  7. react教程 — 组件的生命周期 和 执行顺序

    一.组件执行的生命周期:                  参考  https://www.cnblogs.com/soyxiaobi/p/9559117.html  或  https://www.c ...

  8. React Native——组件的生命周期

    组件生命周期 上流程图描述了组件从创建.运行到销毁的整个过程,可以看到如果一个组件在被创建,从开始一直到运行会依次调用getDefaultProps到render这五个函数:在运行过程中,如果有属性和 ...

  9. React入门--------组件的生命周期

    Mounting/组件挂载相关: componentWillMount componentDidMount Updating/组件更新相关: componentWillReceiveProps sho ...

  10. React(三)组件的生命周期

    Component Specs and LifeCycle <div id="app"></div> <script src="bower_ ...

随机推荐

  1. python自学-day2(变量、if条件判断、运算符操作)

    1.变量 变量只是用于保存内存位置,将变量存储在内存中的作用,方便后面调用,这意味着,在创建变量时会在内存中开辟一个空间. 变量命名规则: 由字母.数字.下划线(_)组成 不能以数字开头 不能使用 P ...

  2. RestTemplate中几种常见的请求方式

    GET请求 第一种:getForEntity getForEntity方法的返回值是一个ResponseEntity<T>,ResponseEntity<T>是Spring对H ...

  3. #define\const\inline的区别与联系

    总结: const用于代替#define一个固定的值,inline用于代替#define一个函数.是#define的升级版,为了消除#define的缺陷. 参考内容:http://www.cnblog ...

  4. ApplicationContextAware的作用

    ApplicationContextAware其实我们看到---Aware就知道是干嘛用的了,就是属性注入的, 但是这个ApplicationContextAware的不同地方在于,实现了这个接口的b ...

  5. 通过rsync+inotify实现数据的实时备份(多台备份机)

    在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足  与传统的cp.ta ...

  6. pat05-图3. 六度空间 (30)

    05-图3. 六度空间 (30) 时间限制 1500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard “六度空间”理论又称作“六度分隔(Six Degrees ...

  7. hash冲突解决和javahash冲突解决

    其实就是四种方法的演变 1.开放定址法 具体就是把数据的标志等的对长度取模 有三种不同的取模 线性探测再散列 给数据的标志加增量,取模 平方探测再散列 给数据的标志平方,取模 随机探测再散列 把数据的 ...

  8. Net-SNMP(V3协议)安装配置笔记(CentOS 5.2)(转)

    原出处:http://blog.ihipop.info/2010/03/722.html 为了这颗仙人掌(cacti),我必须先部署(Net-SNMP), 同时我为了安全因素,也为了简便考虑,决定采用 ...

  9. 将Spring源码转换为工程 + 导入Eclipse时缺失jar包

    将源码转换为工程: 比如查看Spring事务部分的源码. 打开cmd窗口,切换到Spring-tx文件夹下,执行命令 “gradle cleanidea eclipse” . 缺失jar包: 第一步: ...

  10. 【转】带你正确的使用List的retainAll方法求交集

    一. retainAll 方法 public boolean retainAll(Collection<?> c) { //调用自己的私有方法 return batchRemove(c, ...