react生命周期|青训营笔记

122 阅读2分钟

生命周期

类组件的执行初次,会实例化类组件 ,将方法与属性进行实例化处理,首次渲染进入挂载的周期运算,更新的时候进入更新的生命周期运算 但是不会再生成新的实例对象 视图的改变不是依靠重新渲染组件 而是依靠 生命周期函数 重新调用render函数更新视图

//+++++++ 挂载阶段 ++++++++

  • getDefaultProps

  • getInitialState 前面两个都是在类实例化时,在constructor中执行

  • componentWillMount DOM渲染前 ⚠️

  • getDerivedStateFromProps 获取父节点的props和自身的state

  • render 渲染视图 生成DOM class组件中唯一必须实现的方法。 当render被调用时,他会检查this.props.和this.state的变化并返回以下类型之一:

    通过jsx创建的react元素 数组或者fragments:使得render可以返回多个元素 Portals:可以渲染子节点到不同的dom树上 字符串或数值类型:他们在dom中会被渲染为文本节点 布尔类型或者null:什么都不渲染 注意 render函数是纯函数,这意味着在不修改组件state的情况下,每次调用都应该返回相同的结果,并且它不会直接和浏览器交互,如果需要和浏览器交互需要在componentDidMunt函数中或者其他生命周期函数中执行操作。 更新过程如果 shouldComponentUpdate() 返回 false,则不会调用 render()。

  • componentDidMound DOM挂载到根节点

//+++++++ 更新阶段 ++++++++

  • getDerivedStateFromProps 引发视图更新

    • 三种方式

      1. props改变 会进入componentWillReceiveProps(nextProps)⚠️ 新的修改成了getDerivedStateFromProps(nextProps, prevState)
      2. 调用setsSate 会触发getDerivedStateFromProps
      3. 调用this.forceUpdate 会触发getDerivedStateFromProps 再到render函数 跳过了shouldComponentUpdate
  • shouldComponentUpdate(nextProps,nextState) 视图更新前 返回ture会进行下一步 会接收 props与state的新旧值并进行操作 返回false停止更新

  • componentWillUpdate(nextProps,nextState) 视图更新前 ⚠️

  • render 重新渲染视图 class组件中唯一必须实现的方法。

  • getSnapshotBeforeUpdate(prevProps,prevState)在最后一次渲染(提交到dom节点)之前调用,替换componentWillUpdate 它能在组件更改之前获取dom的节点信息(滚动位置),该方法所有返回值都会作为参数传给componentDidUpdate

  • componentDidUpdate(prevProps,prevState,snapshot) 视图更新后

//+++++++ 卸载阶段 ++++++++

  • componentWillUnMount 组件卸载前