React第二篇:组件的生命周期
前言:因为生命周期是必须要掌握的,所以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第二篇:组件的生命周期的更多相关文章
- React Native 中组件的生命周期
概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...
- React Native 中组件的生命周期(转)
概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...
- React Native组件(一)组件的生命周期
相关文章 React Native探索系列 前言 React Native有很多组件比如Image.ListView等等,想要合理的使用组件,首先要先了解组件的生命周期. 1.概述 无论你是开发And ...
- react(一):组件的生命周期
最近兄弟团队让我去帮忙优化两个页面,前端用的react全家桶,后端用的python,上一次写react代码都过去一年了,顺着以前的的学习思路,再捋顺一下react的要点 组件的生命周期就是Reac的工 ...
- 【RN - 基础】之React Native组件的生命周期
下图描述了React Native中组件的生命周期: 从上图中可以看到,React Native组件的生命周期可以分为初始化阶段.存在阶段和销毁阶段. 实例化阶段 实例化阶段是React Native ...
- react第三单元(react组件的生命周期)
第三单元(react组件的生命周期) #课程目标 灵活掌握react组件的生命周期以及组件的活动过程. 能够灵活使用react的生命周期 #知识点 react的类组件的生命周期分为三个阶段 实例期 存 ...
- React: React组件的生命周期
一.简介 在前面的第二篇博文中对组件的生命周期虽然做了一个大略介绍,但总感觉说的过于简单,毕竟生命周期是React组件的核心部分.在我们熟练使用React挂载和合成组件来创建应用表现层的过程中,针对数 ...
- react.js 从零开始(二)组件的生命周期
什么是生命周期? 组件本质上是一个状态机,输入确定,输出一定确定. 当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应.. 一个组件的生命周期可以概括为 初始化:状态下 可以自定义的函数 g ...
- React Native组件、生命周期及属性传值props详解
创建组件的三种方式 第一种:通过ES6的方式创建 /** * 方式一 :ES6 */ export default class HelloComponent extends Component { r ...
随机推荐
- 魔法变量*args 和 **kwargs
其实并不是必须写成*args 和**kwargs. 只有变量前面的 *(星号)才是必须的. 你也可以写成*var 和**vars. 而写成*args 和**kwargs只是一个通俗的命名约定. *ar ...
- 10个实用的Django技巧和建议
Django 作为一个杰出的Python开源框架,或许得不到和其它流行框架如Rails这样多的赞美,但是它和其他框架一样精炼,非常注重DRY(Don’t Repeat Yoursef)原则.组件的重用 ...
- RAW编程接口
LWIP移植好之后,就要使用它提供的API接口来编写程序.
- springMVC框架集成tiles模板
将tiles模板集成到springMVC框架下,大概流程如下: 1.在配置文件中加入tiles支持 我的servlet配置文件名为spring-mvc.xml.具体配置如下: <?xml ver ...
- 新年奉献MVC+EF(CODEFIRST)+EASYUI医药MIS系统(转)
出处:http://www.cnblogs.com/chenlinzhi/p/4332628.html 本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新 ...
- Cuckoo Hash和多级Hash的粗浅认识
通过对Cuckoo Hash.多级Hash和BloomFilter的粗浅了解,感觉它们三者存在类似之处,算是近亲(暂且把普通的Hash称作远亲). Cuckoo Hash的思想非常简单,冲突时,重Ha ...
- 已经导入到VS工具箱中的DevExpress如何使用
1.下载安装DevExpress控件(如DXperienceUniversal-11.1.12.exe),安装后路径:“C:\Program Files (x86)\DevExpress 2011.1 ...
- ssh关于含有外键的传值中无法识别正确的action的原因和解决办法
在含有外键的表中,要保存一个值到这个外键时:逻辑思路:需要先将jsp页面的值传到相应的action中,在这个action中需要引入这个外键的实体层和DAO层(DAO层只需set方法),在执行函数中对于 ...
- cxgrid取消过滤下拉框
选择tableview1.optionscustomize.columnfiltering=fasle;
- MVC4 View 的呈现
一 ActionResult: 1. EmptyResult: Action方法返回的ActionResult对象被ActionInvoker 调用以实现对当前请求的响应,不论Action方法是否具有 ...