简介

普通的UI应用生命周期一般包括Birth, Growth, Death, React中Component的生命周期也是如此,这是一个持续的过程,贯穿整个应用的生命历程。

阶段

1.mounting(birth)

启动和初始化组件的时候,在这个阶段,会发生如下事情:

  • 定义和配置props和state
  • 组件和组件的孩子会装载到本地用户界面堆栈
  • 此阶段只发生一次

2.update(growth)

在以下情况会进入此阶段:

  • 更新了props ,state
  • 处理用户交互
  • 组件层次结构间进行通信。
    此阶段所花时间最多,发生不止一次

3.unmount(death)

在以下情况会进入此阶段:

  • 从Native UI卸载组件实例
  • 用户导航离开
  • UI 界面改变
  • 组件隐藏
    此阶段发生一次,组件准备好垃圾回收

组件生命周期图

组件生命周期方法介绍(来自官方文档

Munting Phase

1. constructor()

在mount之前调用,如果没有更新state或绑定方法,不需要此方法,一般在此方法中完成组件state的初始化工作等

2. componentWillMount()

在mounting发生前立即调用,在render()之前调用,在此方法中调用setState的时候,会触发WillUpdate,render, DidUpdate。一般在此方法中完成部分组件的启动(这些组件的启动不依赖DOM,因为此时DOM未加载完成),如 Ajax 数据获取、启动定时器等。

3. componentDidMount()

在此方法中调用setState方法会触发一次额外的render函数。如果组件的启动依赖DOM的话,需要在此方法中进行,因为此时已经执行过render,dom已经加载完成。

Updating Phase

1. componentWillReceiveProps()

在一个已经mount过的组件接收props变化前调用,调用setState()方法不会触发,有时props不变也会调用,因此如果只希望该方法在发生变化时使用,请比较props和nextProps

2. shouldComponentUpdate()

默认为true。在初始渲染或使用forceUpdate()时,不会调用此方法。返回false不会阻止子组件在其状态更改时重新呈现。目前,如果shouldComponentUpdate()返回false,则不会调用componentWillUpdate(),render()和componentDidUpdate()

3. componentWillUpdate()

当接收到props和state的改变的render之前执行

4. componentDidUpdate()

更新之后立即执行

Unmount Phase

1. componentWillUnmount()

在卸载和销毁组件之前立即调用。在该方法中,一般完成数据的清理,如在移除或隐藏组件的时候,定时器仍然工作,则需要在这个函数里完成定时器的清理,终止定时器的工作。

ReactJS-3-组件生命周期的更多相关文章

  1. angular2系列教程(五)Structural directives、再谈组件生命周期

    今天,我们要讲的是structural directives和组件生命周期这两个知识点.structural directives顾名思义就是改变dom结构的指令.著名的内建结构指令有 ngIf, n ...

  2. Angular2 组件生命周期

    1. 说明 Angular每个组件都存在一个生命周期,从创建,变更到销毁.Angular提供组件生命周期钩子,把这些关键时刻暴露出来,赋予在这些关键结点和组件进行交互的能力. 2. 接口 按照生命周期 ...

  3. [React] 多组件生命周期转换关系

    前段时间一直在基于React做开发,最近得空做一些总结,防止以后踩坑. 言归正传,React生命周期是React组件运行的基础,本文主要是归纳多组件平行.嵌套时,生命周期转换关系. 生命周期 Reac ...

  4. 【转】Tomcat组件生命周期管理

    Tomcat组件生命周期管理 Tomcat中Server,Service,Connector,Engine,Host,Context,它们都实现了org.apache.catalina.Lifecyc ...

  5. Castle IOC容器组件生命周期管理

    主要内容 1.生命处理方式 2.自定义生命处理方式 3.生命周期处理 一.生命处理方式 我们通常创建一个组件的实例使用new关键字,这样每次创建出来的都是一个新的实例,如果想要组件只有一个实例,我们会 ...

  6. Android组件生命周期(二)

    引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  7. Android组件生命周期(一)

    引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  8. vue父子组件生命周期执行顺序

    之前写了vue的生命周期,本以为明白了vue实例在创建到显示在页面上以及销毁等一系列过程,以及各个生命周期的特点.然而今天被问到父子组件生命周期执行顺序的时候一头雾水,根本不知道怎么回事.然后写了一段 ...

  9. React.js 小书 Lesson20 - 更新阶段的组件生命周期

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson20 转载请注明出处,保留原文链接和作者信息. 从之前的章节我们了解到,组件的挂载指的是将组件 ...

  10. Vue父子组件生命周期执行顺序及钩子函数的个人理解

    先附一张官网上的vue实例的生命周期图,每个Vue实例在被创建的时候都需要经过一系列的初始化过程,例如需要设置数据监听,编译模板,将实例挂载到DOM并在数据变化时更新DOM等.同时在这个过程中也会运行 ...

随机推荐

  1. 项目已经部署,tomcat已经启动,网址也没问题,却出现404错误

    这个有可能是tomcat在初始化资源的时候发生了异常...判断tomcat是否发生异常就是看tomcat启动日志里有没有报错就行了. 另一种原因就是可能是修改了项目名称.因为web名称实际上是没有跟着 ...

  2. 第3周课后实践·程序阅读(4)-利用引用訪问私有数据成员

    /* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名:test.cpp * 作 者:刘畅 * 完毕日期:2015年 3 月 2 ...

  3. C 编程中fseek、ftell的用法总结

    fseek 函数功能是将文件指针移动到指定的地方,因此可以通过fseek重置文件指针的位置.函数原型: int  fseek(FILE *stream, long offset,  int origi ...

  4. mysql10---索引优化

    D:\MYSQL\mysql-winx64\data\WIN-20171216YUR-slow.log是慢日志: ; ; # Time: :.472000Z # # Query_time: Rows_ ...

  5. git lfs

    https://git-lfs.github.com/ 1.从这个网址下载git-lfs-windows-amd64-1.1.0.exe,运行这个安装包 2.然后打开git bash 输入git lf ...

  6. html5--项目实战-仿360囧图

    html5--项目实战-仿360囧图 实例: 代码 <!doctype html> <html> <head> <meta charset="utf ...

  7. Newtonsoft.Json.dll 反序列化JSON字符串

    上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...

  8. BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie树

    BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie Description Bessie the cow has a new cell phone and enjo ...

  9. bzoj4260 REBXOR——Trie树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 对于每个位置,求一个前缀最大值和后缀最大值: 也就是从1到 i 的异或和要找前面某处的 ...

  10. 小程序-demo:天气预报

    ylbtech-小程序-demo:天气预报 1.返回顶部 1.app.js //app.js App({ //系统事件 onLaunch: function () {//小程序初始化事件 var th ...