首页 > 其他分享 >React生命周期

React生命周期

时间:2022-10-23 23:32:54浏览次数:68  
标签:生命周期 render DOM 更新 React state props 组件

初始化阶段

组件的构造函数(constuctor)部分,继承React Component,在constructor中通过super(props)调用父类React Component的构造函数,才拥有了之后的生命周期。

constructor

在这个阶段,会获取到外层传递的props数据,这里进行组件初始化的工作,内部state的定义,和组件本身逻辑的初始化。

挂载阶段

componentWillMount

componentWillMount()一般用的比较少,它更多的是在服务端渲染时使用。它代表的过程是组件已经经历了constructor()初始化数据后,但是还未渲染DOM时。

Render

组件的渲染阶段,props或state有更新的时候,如果没有在shouldComponentUpdate中禁止的话,会触发重新渲染,而DOM层的实际重绘过程是一个复杂的过程,这个过程React会通过虚拟DOM的方式和复杂算法进行处理。render函数是一个纯函数,它的返回只依赖传递的参数。这里不能进行state的更新处理,可能会导致无限循环。

componentDidMount

在组件被挂载到DOM上之后调用,只会调用一次,异步数据的获取工作在这里处理。

更新阶段

在父组件重新render或者传入的props或内部的state有更新时,都会进入更新阶段。

componentWillReceiveProps

  • 在接受父组件改变后的props需要重新渲染组件时用到的比较多
  • 接受一个参数nextProps
  • 通过对比nextProps和this.props,将nextProps的state为当前组件的state,从而重新渲染组件

shouldComponentUpdate

大量的数据更新会触发组件一遍又一遍的更新,会造成不小的性能损耗,这里就需要shouldComponentUpdate来进行优化工作,它有两个参数,nextProps和nextState,在这里通过传的更新后数据和当前数据this.props、this.state里的数据进行比对,可以筛选,哪些变化可以触发重绘,哪些就行拦截,如果拦截,return false。如果返回true,则先进行React elements比对,如果相同,则不会触发重绘,如果不同再进行绘制。

componentWillUpdate

这个方法会在render之前调用,可以处理一些更新前需要处理的工作。在React16之后会结合新生命周期getDerivedStateFromProps一起来处理props和state的同步问题。

render

render函数会插入jsx生成的dom结构,react会生成一份虚拟dom树,在每一次组件更新时,在此react会通过其diff算法比较更新前后的新旧DOM树,比较以后,找到最小的有差异的DOM节点,并重新渲染。

componentDidUpdate

这个方法会在render之后调用,在这里可以操作更新后的组件DOM。

卸载阶段

componentWIllUnmount

在组件被卸载前调用,这里会处理一些数据清理、定时器清理等工作来避免内存泄露。

标签:生命周期,render,DOM,更新,React,state,props,组件
From: https://blog.51cto.com/u_15743951/5787686

相关文章

  • react componentWillReceiveProps
    在React16之前,这个生命周期可是非常常用,对于外部传递的props的响应工作在这里处理,比如我的props里传了一个数值变量num,本来num=1,外部有更新将num变为2,会触发当前组件内也......
  • react Render
    组件的渲染阶段,props或state有更新的时候,如果没有在shouldComponentUpdate中禁止的话,会触发重新渲染,而元素层的实际重绘过程是一个复杂的过程,这个过程React会通过虚拟元素的......
  • Netty Reactor模型
      1、netty抽象出两个线程池:BossGroup负责监听和建立连接;WorkerGroup负责网络IO的读写2、BossGroup和WorkerGroup类型都是NioEventLoopGroup,相当于一个事件......
  • React Gatsby 框架
    Gatsby简介1.What(是什么)GatsbyisafreeandopensourceframeworkbasedonReactthathelpsdevelopersbuildblazingfastwebsitesandapps来自官网的介......
  • React 富文本展示
    dangerouslySetInnerHTMLexportdefaultfunctionApp(){letinit=()=>{//向后端发送请求拿到html用富文本填展示return`<div>......
  • react router 6
    -2021年11月reactrouter6成为默认版本,npm安装时自动安装6版本每次reactrouter发布都会有3个版本react-router:路由的核心库,提供了很多组件钩子react-router-dom:......
  • Reactor 模式线程模型
    根据Reactor的数据量和处理资源池线程数量,可以分为3钟典型实现单Reactor单线程  单Reactor多线程  主从Reactor多线程 ......
  • Spring注解开发入门(三)Bean的生命周期和作用范围
    1.Bean的作用域,其实就是bean采用单例模式还是非单例模式放在网络编程环境是指bean在http请求的作用范围的过程! 在java类上加上@Scope注解,可以设置bean的作用范围p......
  • 使用react+redux实现弹出框案例
    redux实现弹出框案例实现效果,点击显示按钮出现弹出框,点击关闭按钮隐藏弹出框新建弹出框组件src/components/Modal.js,在index.js中引入app组件,在app中去显示计数器和......
  • react扩展
    -一、setState的两种用法:setState是异步的调用,当我们代用过setState后,紧接着打印state的值,发现是更改之前的值。对象式和函数式importReact,{Component}from're......