前言:因为生命周期是必须要掌握的,所以React的第二篇咱就写这。

(版本:16.3.2)

React的生命周期大致分为四个状态:分别是Mouting、Updating、Unmounting、Error handing。以下,让我们来介绍各个状态吧。

(注:不被官网推荐使用的我不会放入实际运行步骤中)


Mouting

创建实例插入Dom的过程状态,将按以下顺序调用这些方法:

  • constructor()
  • static getDerivedStateFromProps() (组建实例化时或props变化会被调用)
  • componentWillMount() / UNSAFE_componentWillMount()
  • render()
  • componentDidMount()

constructor(): 需要初始化state值或bind函数时调用。该方法在类被加载前运行,在用该类时,需要调用super(props),不然props的调用会出错。

static getDerivedStateFromProps(nextprops,prevstate):props变化时被调用,若是父组件重新渲染,也会被调用。它返回新的props值。

componentWillMount():render()前调用的一个函数,现官网不推荐使用。

render():组件的必需品。内容应为相对纯粹的html文,返回null或false时,ReactDOM.findDOMNode(this)将返回null。

componentDidMount():组件装填完毕后,立即被调用。通常DOM节点的初始化都在此,在此方法内调用setState()会调用两次render(),需注意性能。

即若有设置state或bind函数时,整体必会调用的过程为

contructor() -> static getDerivedStateFromProps() -> render() -> componentDidMount()


Updating


通常在props或state值变化时被调用,将按以下顺序调用方法:

  • componentWillReceiveProps() / UNSAFE_componentWillReceiveProps()
  • static getDerivedStateFromProps() (组建实例化时或props变化会被调用)
  • shouldComponentUpdate()
  • componentWillUpdate() / UNSAFE_componentWillUpdate()
  • render()
  • getSnapshotBeforeUpdate()
  • componentDidUpdate()

componentWillReceiveProps():props变化时被调用,若是父组件重新渲染,也会被调用。setState通常不会调用该方法。现不被推荐使用。

static getDerivedStateFromProps(nextprops,prevstate):props变化时被调用,若是父组件重新渲染,也会被调用。它返回新的props值。

shouldComponentUpdate(nextProps, nextState):在props变化或执行setState时就会被调用,通常情况返回true。若返回false,componentWillUpdate()、render()、componentDidUpdate()将不会被调用。可通过this.props与nextProps或this.state与nextState比较,判断是否返回true,不建议进行深度检查或使用JSON.stringify(),效率会很低。另外以后可能会视为提示而不是严格指令。

componentWillUpdate(nextProps, nextState):渲染之前的一步操作,不能在这调用setState,现不被推荐使用。

render():组件的必需品。内容应为相对纯粹的html文,返回null或false时,ReactDOM.findDOMNode(this)将返回null。

getSnapshotBeforeUpdate(prevProps, prevState):在最近的更改被提交到DOM元素前,使得组件可以在更改之前获得当前值,此生命周期返回的任意值都会传给componentDidUpdate()。

componentDidUpdate(prevProps, prevState, snapshot):更新完成后会立即调用此方法,snapshot的值即为getSnapshotBeforeUpdate的返回值。更新DOM节点的操作可放在这里进行。

即若只有state值变化时,整体必会调用的过程为

shouldComponentUpdate() -> render() -> getSnapshotBeforeUpdate() -> componentDidUpdate()

即若有prop值变化时,整体必会调用的过程为

static getDerivedStateFromProps() -> shouldComponentUpdate() -> render() -> getSnapshotBeforeUpdate() -> componentDidUpdate()

 


Unmounting

移除DOM节点时,会调用以下方法:

  • componentWillUnmount()

componentWillUnmount():组件销毁之前会被调用。在此需要进行必要的清理,例如使定时器失效等。不能在此调用setState,因为到了这组件永远不能再被渲染。


Error handing

渲染期间,在组件的生命周期内或是构造函数内发生error的话,将调用以下方法:

  • componentDidCatch()

componentDidCatch(error, info):错误边界会抓取组件内JS的错误,并记录显示回退UI。它会捕获渲染期间,生命周期方法以及下面整个树的构造函数的错误。

React第二篇:组件的生命周期的更多相关文章

  1. React Native 中组件的生命周期

    概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...

  2. React Native 中组件的生命周期(转)

    概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...

  3. React Native组件(一)组件的生命周期

    相关文章 React Native探索系列 前言 React Native有很多组件比如Image.ListView等等,想要合理的使用组件,首先要先了解组件的生命周期. 1.概述 无论你是开发And ...

  4. react(一):组件的生命周期

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

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

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

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

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

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

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

  8. react.js 从零开始(二)组件的生命周期

    什么是生命周期? 组件本质上是一个状态机,输入确定,输出一定确定. 当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应.. 一个组件的生命周期可以概括为 初始化:状态下 可以自定义的函数 g ...

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

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

随机推荐

  1. MQTT协议实现Eclipse Paho学习总结

    MQTT协议实现Eclipse Paho学习总结 摘自:https://www.cnblogs.com/yfliufei/p/4383852.html 2015-04-01 14:57 by 辣椒酱, ...

  2. IBatis模糊查询

    IBatis模糊查询  补充: mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * ...

  3. Spring Boot利用poi导出Excel

    至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...

  4. C# 进程Process基本的操作说明

    public int CallPhoneExe(string arg) //arg为进程的命令行参数 { WaitHandle[] waits =new WaitHandle[2]; //定义两个Wa ...

  5. javascript总结21:javascript-JSON与遍历

    1 什么是JSON JavaScript Object Notation(JavaScript对象表示形式) JavaScript的子集 JSON和对象字面量的区别 JSON的属性必须用双引号引号引起 ...

  6. CodeForces 690C1 Brain Network (easy) (水题,判断树)

    题意:给定 n 条边,判断是不是树. 析:水题,判断是不是树,首先是有没有环,这个可以用并查集来判断,然后就是边数等于顶点数减1. 代码如下: #include <bits/stdc++.h&g ...

  7. ubuntu 14.04常见问题

    1. 改root密码 sudo passwd root 2. 显示登录框 sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 添加 ...

  8. WordPaster2-Chrome 45安装说明

    下载地址:http://www.ncmem.com/download/WordPaster2/WordPaster.exe 安装方法:   运行WordPaster.exe进行安装,WordPaste ...

  9. JDK8新特性:使用stream、Comparator和Method Reference实现集合的优雅排序

    大家对java接口Comparator和Comparable都不陌生,JDK8里面Comparable还和以前一样,没有什么改动:但是Comparator在之前基础上增加了很多static和defau ...

  10. IE8下window.open 二次无法加载页面

    我原先的IE是系统默认自带的IE7,升级到IE8之后,就出现了此现象: 打开一个窗口(window.open方式)后,再打开时,新窗口的页面显示空白,无法加载其内容.关闭ie后,重新偿亦是如此,第一次 ...