react基础 react组件生命周期

组件生命周期

生命周期仅存在于类组件中,函数组件每次调用都是重新运行函数,旧的组件即刻被销毁。

旧版生命周期

React < 16.0.0

初始化阶段

  1. constructor: 初始化阶段,初始化属性和状态
  • 同一个组件对象只会创建一次
  • 不能再页面第一次挂载到页面之前调用setState,最好不要在构造函数中使用setSate

挂载阶段

  1. componentWillMount 组件即将被挂载到页面
  • 正常情况下,和构造函数一样,只会运行一次
  • 可以使用setSate,但是为了避免bug,不允许使用,因为在某些情况下,可能会被调用多次
  1. render: 组件渲染虚拟DOM
  • 返回的React元素会被挂载到虚拟DOM树中,最终渲染到页面的真实DOM树中
  • render可能不只运行一次,只要重新渲染就会重新运行
  • 严禁使用setState,可能会导致无限递归渲染
  1. componentDidMount: 虚拟DOM已经挂载到页面成为真实的DOM
  • 只会运行一次
  • 可以使用setSate
  • 通常情况,会将网络请求、计时器等一开始需要操作,在该函数中实现

更新阶段

  1. componentWillReceiveProps: 即将接收到新的属性值,组件的属性被改变
  • 参数为新的属性对象
  • 当前组件的属性还未改变
  1. shouldComponentUpdate: 指示react是否要重新渲染该组件,通过返回true和false来指定,默认情况下会返回true
  • 可以用来优化效率
  • 参数一:新的属性、参数二:新的状态
  1. componentWillUpdate: 组件即将被重新渲染
  • 参数一:新的属性、参数二:新的状态
  1. componentDidUpdate: 组件已完成重新渲染
  • 参数一:之前属性、参数二:之前状态
  • 往往在该函数中使用dom操作,改变元素

销毁阶段

  1. componentWillUnmount 组件即将被销毁
  • 通常在该函数中,销毁一些组件依赖的资源,比如计时器

新版生命周期

React >= 16.0.0

初始化阶段

  1. constructor: 初始化阶段,初始化属性和状态
  • 同一个组件对象只会创建一次
  • 不能再页面第一次挂载到页面之前调用setState,最好不要在构造函数中使用setSate

挂载阶段

  1. static getDerivedStateFromProps
  • 参数一:新的属性、参数二:新的状态
  • 该函数是静态的
  • 该函数的返回值会覆盖组件状态
  1. render: 组件渲染虚拟DOM
  • 返回的React元素会被挂载到虚拟DOM树中,最终渲染到页面的真实DOM树中
  • render可能不只运行一次,只要重新渲染就会重新运行
  • 严禁使用setState,可能会导致无限递归渲染
  1. componentDidMount: 虚拟DOM已经挂载到页面成为真实的DOM
  • 只会运行一次
  • 可以使用setSate
  • 通常情况,会将网络请求、计时器等一开始需要操作,在该函数中实现

更新阶段

  1. static getDerivedStateFromProps 每次运行render之前都会运行
  • 参数一:新的属性、参数二:新的状态
  • 该函数是静态的
  • 该函数的返回值会覆盖组件状态
  1. shouldComponentUpdate: 指示react是否要重新渲染该组件,通过返回true和false来指定,默认情况下会返回true
  • 可以用来优化效率
  • 参数一:新的属性、参数二:新的状态
  1. getSnapshotBeforeUpdate: 获取更新前的快照,真实的DOM构建完成,但还未实际渲染到页面中
  • 在该函数中,通常用于实现一些附加的dom操作
  • 该函数的返回值会作为componentDidUpdate的第三个参数
  1. componentDidUpdate: 组件已完成重新渲染
  • 参数一:之前属性、参数二:之前状态
  • 往往在该函数中使用dom操作,改变元素

销毁阶段

  1. componentWillUnmount 组件即将被销毁
  • 通常在该函数中,销毁一些组件依赖的资源,比如计时器