这是一个从印记中文 | react官方文档提取总结的,算是帮自己理清并且强化记忆React的生命周期,以便以后编写组件的时候能够有更清晰的思路。本文如有纰漏,欢迎指正

整体上来讲,React生命周期分为了 挂载(装配)更新卸载 以及 捕错 四个状态阶段。每种状态里需要执行若干个生命周期函数,这些函数可能会在不同的阶段里重新被调用。

用流程图来形象地归纳总结如下:

挂载(装配)

这些方法会在组件实例创建和插入DOM中时被调用

1.constructor()

构造函数会在装配前调用。


constructor(props){
//...
}

2.static getDerivedStateFromProps()

组件实例化后接受新属性时调用,返回一个对象以更新状态,或返回null表明不需要更新状态


static getDerivedStateFromProps(nextProps,prevState)

3.componentWillMount()/UNSAFE_componentWillMount()

[UNSAFE_]componentWillMount()装配前立刻调用,发生在render()之前

17版前,这一生命周期函数名字都可以写为componentWillMount()

4.render()

必须的钩子函数,不应该改变组件的状态,且不与浏览器交互

5.componentDidMount()

componentDidMount():组件装配后立刻调用,实现远端网络请求的地方

更新

属性或状态发生改变后,会触发一次更新,组件重新渲染,下述方法会被调用。

1. componentWillReceiveProps() / UNSAFE_componentWillReceiveProps()

在挂载了的组件接收到新属性前调用。推荐使用getDerivedStateFromProps生命周期而不是该函数。


UNSAFE_componentWillReceiveProps(nextProps)

2. static getDerivedStateFromProps()

挂载章节该钩子

3. shouldComponentUpdate()

在挂载了的组件属性变化状态变化时调用。通过控制返回的boolean值告诉React是否重新渲染该组件。

无法控制子组件的重新渲染与否

4. componentWillUpdate() / UNSAFE_componentWillUpdate()

当接收到新属性或状态时UNSAFE_componentWillUpdate()渲染前被立即调用


UNSAFE_componentWillUpdate(nextProps, nextState)

注意

若shouldComponentUpdate()返回false,UNSAFE_componentWillUpdate()将不会被调用。

5. render()

挂载章节该钩子

6. getSnapshotBeforeUpdate()

getSnapshotBeforeUpdate()在最新的渲染输出提交给DOM前将会立即调用。它让你的组件能在当前的值可能要改变前获得它们。这一生命周期返回的任何值将会作为参数被传递给componentDidUpdate()


getSnapshotBeforeUpdate(prevProps, prevState)

7. componentDidUpdate()

在更新发生后立即被调用。适合发送请求的地方


componentDidUpdate(prevProps, prevState)

卸载

1. componentWillUnmount()

componentWillUnmount()组件被卸载和销毁之前立刻调用。可以在该方法里处理任何必要的清理工作,例如解绑定时器,取消网络请求清理任何在componentDidMount环节创建的DOM元素

错误处理

1. componentDidCatch()

错误边界捕捉发生在子组件树中任意地方的JavaScript错误,一个错误边界并不能捕捉它自己内部的错误。


componentDidCatch(error, info)

来源:https://segmentfault.com/a/1190000017175195

帮你理清React的生命周期的更多相关文章

  1. react.js 生命周期componentDidUpdate的另类用法:防止页面过渡刷新

    场景:数据新增成功之后,需要返回原来的查询表,这时候的查询,需要使用react的生命周期:componentDidUpdate componentDidUpdate() 这个生命周期的作用是当prop ...

  2. React的生命周期

    我们先来看一张图,其实看完这张图基本就懂了,如果还不懂,请继续往下看. getDefaultProps 执行过一次后,被创建的类会有缓存,映射的值会存在this.props,前提是这个prop不是父组 ...

  3. 附实例!图解React的生命周期及执行顺序

    本文由云+社区发表 作者:前端林子 1.七个可选的生命周期 可以结合下图来看: (1) componentWillMount() 仅在render()方法前被调用一次,如果在该方法中调用了setSta ...

  4. React之生命周期

    哈喽,这是我的第一篇博客,请大家多多关照~ 追根溯源:What's the lifeCycle? 生命周期函数指在某一时刻组件会自动调用执行的函数: React生命周期概览: 接下来我们就着生命周期的 ...

  5. React组件生命周期小结

    React组件生命周期小结 下面所写的,只适合前端的React.(React也支持后端渲染,而且和前端有点小区别,不过我没用过.) 相关函数 简单地说,React Component通过其定义的几个函 ...

  6. React—组件生命周期详解

    React—组件生命周期详解 转自 明明的博客  http://blog.csdn.net/slandove/article/details/50748473 (非原创) 版权声明:转载请注明出处,欢 ...

  7. React 函数生命周期

      React 函数生命周期基础 1 ,概念 在组件创建.到加载到页面上运行.以及组件被销毁的过程中,总是伴随着各种各样的事件,这些在组件特定时期,触发的事件,统称为组件的生命周期:* 2,组件生命周 ...

  8. 七天接手react项目 —— 生命周期&受控和非受控组件&Dom 元素&Diffing 算法

    生命周期&受控和非受控组件&Dom 元素&Diffing 算法 生命周期 首先回忆一下 vue 中的生命周期: vue 对外提供了生命周期的钩子函数,允许我们在 vue 的各个 ...

  9. 野心勃勃的React组件生命周期

    当你还在写着Angular指令,过滤器,注入,服务,提供者,视图模版的时候,是不是觉得很烦,好在这个时候,React已经神一样的出现在历史舞台. React组件    React实现了UI=Fn(St ...

随机推荐

  1. 区块链入门到实战(19)之以太坊(Ethereum) – 以太币

    以太币的作用:防范以太坊网络被滥用和激励矿工. 与比特币网络有比特币类似,以太坊(Ethereum)也有自己的虚拟币 — 以太币. 以太币的主要作用有2个: 应用程序执行任何操作都需要支付以太币,防范 ...

  2. 总结java中创建并写文件的5种方式

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...

  3. 搜索会抓取网站域名的whoise信息吗

    http://www.wocaoseo.com/thread-309-1-1.html 网站是否在信产部备案,这是不是会成为影响网站收录和排名的一个因素?百度是否会抓取域名注册人的相关whois信息吗 ...

  4. Javascript基本数据认识

    1.Js的组成 2.Js的三种引入 行内式 <input type="button" value="来嘛来嘛" onclick="alert(' ...

  5. 组件 popup 设计和源码剖析

    前言 NutUI 是一套京东风格的移动端 Vue 组件库,生态系统覆盖面广,支持按需加载.主题定制.多语言等,功能强大.目前 40+ 京东项目正在使用,设计精美,风格统一.在开发组件库的过程中,Nut ...

  6. React的几种组件

    一.函数组件 该函数在React中是一个有效的组件,可以接收唯一带有数据的props(代表属性)对象,并返回一个React元素.函数式组件要特别注意,组件名称首字母一定要大写.这种方式也成为无状态组件 ...

  7. php验证当前是设备是电脑端还是手机端

    <?php // 验证设备为PC还是WAP $agent = $_SERVER['HTTP_USER_AGENT']; if(strpos($agent,"comFront" ...

  8. 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  9. [BUUOJ记录] [BJDCTF 2nd]old-hack & Schrödinger & elementmaster

    三道比较简单的的题放一起一写,old-hack是ThinkPHP框架的一个nday,Schrödinger和elementmaster没啥考点,就是脑洞 一.old-hack 进入题目没发现什么Hi ...

  10. springboot入门遇到Whitelabel Error Page错误

    错误页面: 解决方法: 启动类要放在最外层,改成下面的