前言:

  在最初学习react的过程中,我对react的生命周期没有足够的重视,使得我在开发过程中遇到了很多问题。弄懂react的声明周期,可以让你的代码更加高效,更加优美。

什么是生命周期函数?

生命周期函数(钩子函数)通俗的说就是在某一时刻会被自动调用执行的函数。

react的生命周期可以分成四个部分:

props,state,render()函数:

 1. render()函数会在props,state改变时触发。

 2.子组件的render()函数会在父组件render()执行的时候被执行(这会导致一些性能问题,我们可以在子组件的componentshouldupdate函数中进行判断,优化性能)

   在render(),创建虚拟dom,进行diff算法,更新dom树。

注意:不要在render中修改state,会导致死循环。

 1.初始化

  在这里可以初始化props,state

2.挂载

  ①:componentWillMount():  注意:改生命周期在未来17版本中将被弃用(在这里请求异步数据,render可能不会渲染到,因为componentWillMount执行后,render立马执行)

      组件被挂载到页面之前调用,整个生命周期中只会调用一次(组件更新时不会再调用)。

      注意:在这里可修改state

  ②:componentDidMount():

      组件被挂载到页面之后调用,整个生命周期只调用一次(组件更新不会调用)。

     建议:在这里可以异步请求数据。在这里设置状态会触发重新渲染。但是不推荐在这里使用setState函数,它会触发一次额外的渲染,而且是在浏览器刷新屏幕之前执行,用户看不到这个状态。在这里使用setState函数会导致性能问题。

3.更新

   new: getDerivedStateFromProps(nextProps,prevState)

新的静态getDerivedStateFromProps生命周期在组件实例化以及接收新props(只要父组件重新渲染,那么这个props不论值是否一样都是一个新的props)后调用。它可以返回一个对象来更新state,或者返回null来表示新的props不需要任何state更新。

new:getSnapshotBeforeUpdate()

新的getSnapshotBeforeUpdate生命周期在更新之前被调用(例如,在DOM被更新之前)。此生命周期的返回值将作为第三个参数传递给componentDidUpdate。 (这个生命周期不是经常需要的,但可以用于在恢复期间手动保存滚动位置的情况。)

  ①: componentWillReceiveProps(nextprops):  注意:此生命周期在未来17版本中将被弃用

      组件从父组件中接受了新的props(只要父组件重新渲染,那么这个props不论值是否一样都是一个新的props),并且组件已经存在时调用。(组件初始化时候不调用)。

 注意:可以根据属性的变化,通过调用this.setState()来更新你的组件状态,旧的属性还是可以通过this.props来获取,这里调用更新状态是安全的,并不会触发额外的render调用

  ②: shouldComponentUpdate(nextprops,nextstate):

      组件更新之前调用(组件接受新的props或者state)。函数会返回一个布尔值,true才会更新组件。

      注意:最好判断一下新旧两个props/state是否相同,相同则返回false不要触发更新。这样就不用生成新的dom树和旧的进行diff算法对比,从而优化性能。(因为父组件render()调用会使得子组件render()也被执行,引起性能问题)

③:componentWillUpdate(nextprops,nextstate):    注意:此生命周期在未来17版本中将被弃用

      组件更新之前(componentshouldupdate返回true)时调用,组件初始化时不调用

     注意:在这里可以更改state,nextstate.xxx = xxx,但是在这里不能调用setState函数,这会导致函数调用componentshouldupdate从而进入死循环。

④:componentDidUpdate():

      组件更新完成之后调用,组件初始化时候不调用。

      注意:可以在这里获取dom

4.卸载

  ①:componentWillUnmount():

      组件即将被卸载时执行

     注意:在这里清除一些不需要的监听和计时器

理解react生命周期,以及react生命周期的使用场景相关推荐

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

    React Native 中组件的生命周期 概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对 ...

  2. 前端React教程第二课 React生命周期设计思想

    02 为什么 React 16 要更改组件的生命周期?(上) React 生命周期已经是一个老生常谈的话题了,几乎没有哪一门 React 入门教材会省略对组件生命周期的介绍.然而,入门教材在设计上往往 ...

  3. 【前端学习】React学习笔记-事件、生命周期、虚拟DOMdiffing

    跟着尚硅谷的天禹老师学习React 看视频可以直接点击 b站视频地址 React中的事件处理 补充ref 上面的ref在React官网中提到不要被过度使用,在一些情况下可以使用其他方法来获取数据,比如 ...

  4. react组件生命周期_React组件生命周期-挂钩/方法介绍

    react组件生命周期 React components have several lifecycle methods that you can override to run your code a ...

  5. [react] React16废弃了哪些生命周期?为什么?

    [react] React16废弃了哪些生命周期?为什么? React16废弃的生命周期有3个will: componentWillMount componentWillReceiveProps co ...

  6. [react] 函数式组件有没有生命周期?为什么?

    [react] 函数式组件有没有生命周期?为什么? 没有生命周期 因为他没有继承React.Component 所以也不需要render() 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容 ...

  7. react中用useEffect模拟组件生命周期

    1. react中的生命周期 react中的class组件是拥有生命周期的. 生命周期分为:mounting,updating,unmounting三个阶段. 不同生命周期阶段包括不同的生命周期函数: ...

  8. vue生命周期和react生命周期对比。

    生命周期 指的是组件从初始化开始到结束的过程 或者是生命周期是描述组件从开始到结束的过程,每个组件都具有生命周期,都对组件通过生命周期给予的钩子函数进行管理. 钩子函数 指的是系统某些状态和参数发生改 ...

  9. React、react生命周期、react生命周期运行过程、shouldComponentUpdate的用法

    React.react生命周期.react生命周期运行过程 1.创建阶段 constructor(){super()console.log('执行构造函数')this.state={num:1}}UN ...

  10. java 静态变量生命周期(类生命周期)

    java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...

最新文章

  1. 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01
  2. java中final class的一点思考
  3. mysql的count()函数如何选择索引,千万级表的count()查询优化实例
  4. SQL盲注之时间注入
  5. 软件体系结构的风格(转载)
  6. 小白的CMMI3体验
  7. Spatial Transformer Networks(STN)详解
  8. Source Insight上手教程
  9. vscode vue解决跨域_在vs code 中如何创建一个自己的 Vue 模板代码
  10. 用iFrame遮挡DropDownList的方法
  11. 打开相机用鼠标画框,画下一个时上一个消失
  12. 编一程序,将两个字符串连接起来,不要用strcat函数.
  13. php linux unoconv,Linux-CentOS 安装 Unoconv
  14. CMOS反相器设计与仿真
  15. 五一培训 清北学堂 DAY3
  16. win10系统装服务器2008蓝屏,升级安装Win10正式版后出现蓝屏怎么办?Win10蓝屏原因分析及解决方法...
  17. opencv 播放mp4
  18. 网中人《shell十三问》简体版整理
  19. 安卓智能地图开发与实施六:离线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0)
  20. 什么是CUID,CRUD的操作

热门文章

  1. Adobe Flash Player 29.0.0.140官方正式版
  2. golang 中 signal 包的 Notify 函数用法介绍
  3. python画函数图像网格_用python 画一个网格
  4. C语言调用函数如何返回多个变量值?【基础】
  5. 这本书能让你减肥/戒烟/工作脱困/摆脱债务/重掌生活
  6. 环与圈_扩大路径法证明
  7. 国内代码托管中心-码云
  8. 衣服、商品、商城网站模板首页,仿U袋网,vue+elementui简洁实现(二)
  9. 一篇文章理解JS中同步任务和异步任务以及宏任务与微任务的原理和执行机制
  10. Android SVG矢量资源的使用方法