当前位置: 首页 > news >正文

React组件(一):生命周期

文章目录

    • 组件的生命周期
    • 生命周期的阶段
      • 1、组件创建阶段
      • 2、组件运行阶段
      • 3、组件销毁阶段
    • 组件生命周期的执行顺序

组件的生命周期

在组件创建、到加载到页面上运行、以及组件被销毁的过程中,总是伴随着各种各样的事件,这些在组件特定时期,触发的事件统称为组件的生命周期。

生命周期的阶段

组件生命周期分为三个阶段,下面分别来讲解。

1、组件创建阶段

组件创建阶段的生命周期函数,有一个显著的特点:创建阶段的生命周期函数,在组件的一辈子中,只执行一次。

  • getDefaultProps

初始化 props 属性默认值。

  • getInitialState

初始化组件的私有数据。因为 state 是定义在组件的 constructor 构造器当中的,只要new 了 class类,必然会调用 constructor构造器。

  • componentWillMount()

组件将要被挂载。此时还没有开始渲染虚拟DOM。

在这个阶段,不能去操作DOM元素,但可以操作属性、状态、function。相当于 Vue 中的Create()函数。

  • render()

第一次开始渲染真正的虚拟DOM。当render执行完,内存中就有了完整的虚拟DOM了。

意思是,此时,虚拟DOM在内存中创建好了,但是还没有挂在到页面上。

在这个函数内部,不能去操作DOM元素,因为还没return之前,虚拟DOM还没有创建;当return执行完毕后,虚拟DOM就创建好了,但是还没有挂在到页面上。

  • componentDidMount()

当组件(虚拟DOM)挂载到页面之后,会进入这个生命周期函数

只要进入到这个生命周期函数,则必然说明,页面上已经有可见的DOM元素了。此时,组件已经显示到了页面上,state上的数据、内存中的虚拟DOM、以及浏览器中的页面,已经完全保持一致了。

当这个方法执行完,组件就进入都了 运行中 的状态。所以说,componentDidMount 是创建阶段的最后一个函数。

在这个函数中,我们可以放心的去 操作 页面上你需要使用的 DOM 元素了。如果我们想操作DOM元素,最早只能在 componentDidMount 中进行。相当于 Vue 中的 mounted() 函数

2、组件运行阶段

有一个显著的特点,根据组件的state和props的改变,有选择性的触发0次或多次。

  • componentWillReceiveProps()

组件将要接收新属性。只有当父组件中,通过某些事件,重新修改了 传递给 子组件的 props 数据之后,才会触发这个钩子函数。

  • shouldComponentUpdate()

判断组件是否需要被更新。此时,组件尚未被更新,但是,state 和 props 肯定是最新的。

  • componentWillUpdate()

组件将要被更新。此时,组件还没有被更新,在进入到这个生命周期函数的时候,内存中的虚拟DOM还是旧的,页面上的 DOM 元素也是旧的。(也就是说,此时操作的是旧的 DOM元素)

  • render

此时,又要根据最新的 state 和 props,重新渲染一棵内存中的 虚拟DOM树。当 render 调用完毕,内存中的旧DOM树,已经被新DOM树替换了!此时,虚拟DOM树已经和组件的 state 保持一致了,都是最新的;但是页面还是旧的。

  • componentDidUpdate

此时,组件完成更新,页面被重新渲染。此时,state、虚拟DOM 和 页面已经完全保持同步。

3、组件销毁阶段

一辈子只执行一次。

  • componentWillUnmount: 组件将要被卸载。此时组件还可以正常使用。

组件生命周期的执行顺序

1、Mounting

  • constructor()

  • componentWillMount()

  • render()

  • componentDidMount()

2、Updating

  • componentWillReceiveProps(nextProps):接收父组件传递过来的属性

  • shouldComponentUpdate(nextProps, nextState):一旦调用 setState,就会触发这个方法。方法默认 return true;如果 return false,后续的方法就不会走了。

  • componentWillUpdate(nextProps, nextState)

  • render()

  • componentDidUpdate(prevProps, prevState)

3、Unmounting

  • componentWillUnmount()
http://www.dtcms.com/a/195342.html

相关文章:

  • 用Python绘制梦幻星空
  • 软件架构风格系列(3):管道 - 过滤器架构
  • JavaScript - JavaScript 运算符之圆括号运算符与方括号运算符(圆括号运算符概述、圆括号运算符用法、方括号运算符概述、方括号运算符用法)
  • 方案精读:122页智能制造APS MES信息化系统技术方案【附全文阅读】
  • opencloudos 安装 mosquitto
  • UNiAPP地区选择
  • MySQL的缓存策略
  • Femap许可优化策略
  • 学习日志09 java
  • 中级统计师-统计学基础知识-第一章
  • spring框架的JDBC模板技术
  • lesson03-简单回归案例(理论+代码)
  • GTS-400 系列运动控制器板卡介绍(三十四)---运动程序多线程累加求和
  • 练习小项目3:随机正能量语录生成器
  • C语言—指针4
  • EXCEL在一列数据前统一添加负号
  • 【Manim】使用manim画一个高斯分布的动画
  • 黑马k8s(八)
  • Spring MVC 对 JavaWeb 的优化:从核心组件到注解
  • 使用 LSTM/GRU 预测设备异常的模型
  • 前端 vue 部署 nginx 请求 404
  • MCP概述及MCP Server的使用和实现(谷歌ADK使用MCP Server)
  • P6123 [NEERC 2016] Hard Refactoring 题解
  • Invicti-Professional-V25.5
  • C/C++实践(九)C++二叉搜索树深入讲解
  • 高效批量合并Word文档的工具介绍
  • FC7300 PWM MCAL配置引导
  • 关于计算机系统和数据原子性的联系
  • Redis 五种类型基础操作(redis-cli + Spring Data Redis)
  • 反编译读取.class文件