React(三) ——新、旧生命周期

简介: React(三) ——新、旧生命周期

⛳React生命周期


🌋初始化阶段

由 ReactDOM.render()触发 —— 初次渲染

componentWillMount()

⚡1. 组件将要被挂载,第一次上树前render之前最后一次修改状态的机会

⚡2. 初始化数据的作用

⚡3. 清除计时器,取消订阅

注意:出现黄色警告,可以写成

UNSAFE_componentWillMount(){}
//因为其旧版本componentWillMount优先级较低,可以会被打断,会再次执行,不够安全

render()

🚀1. 正在渲染

🚀2. 只能访问this.props和this.state,不允许修改状态和Dom输出

componentDidMount()

📢1. 组件挂载完毕,成功render并渲染完成真实Dom之后触发,可以修改Dom

📢2. 常用于: 数据请求、订阅函数调用、设置计时器、基于创建完的dom进行初始化 BetterSroll

📢3.语法:componentDidMount()

👣运行中阶段

由组件内部 this.setState() 或 父组件重新render触发

componentWillReceiveProps()

📌1. 父组件修改属性触发,最先获得父组件传来的属性,可以利用属性进行ajax或者逻辑处理

📌2. 只能在子组件中使用

📌3. 可以将属性转化成孩子自己的状态

state={
    title:'zhangsan'
}  
.......................
componentWillReceiveProps(nextProps){
      //this.props.text 老的属性
      //nextProps 新的属性
      this.setState({
          title:nextProps.text//可以将属性转化成孩子自己的状态
      })
    }

shouldComponentUpdate()

📢1. 是否要进行修改数据

📢2. shouComponentUpdate(nextProps,nextState)两个参数,第一个为新的属性,第二个为新的状态

📢3. 返回true或false来控制组件是否更新

shouldComponentUpdate(nextProps,nextState){
    //this.state 老的状态,nextState 新的状态
    /*if( 老的状态!== 新的状态){
        return true;
    }*/
    //如果state中既有对象又有数组需要比较较麻烦时,可以将其转为字符串在进行比较
    if(JSON.stringify(this.state))!== JSON.stringify(nextState){
        return true
    }
    return false;
  }

注意:给返回true时加上适合的条件,会提高性能

componentWillUpdate()

  1. 将要改变数据
UNSAFE_componentWillUpdate(){}

componentDidUpdate()

首次渲染不会执行该方法,会在更新后被立即调用

💧1. 改变数据

💧2. 更新多次

💧3. 修改dom节点等一系列操作

componentDidUpdate(prevProps,prevState){
    //可以通过参数获得老的属性和状态
    console.log(prevProps,prevState.list);
    //更新后,获取dom节点,进行一系列操作
    if(prevState.list.length == 0){
        new BetterScroll("#warpper")
    } console.log('componentDidUpdate',document.getElementById('myname').innerHTML);
  }

注意:这个时候已经二次render完了,不存在nextProps,this.props中已经是最新的数据了,所以想得到最新的属性值,直接通过this.props拿

🏓销毁阶段

componentWillUnmount()

💦在删除组件之前进行清理操作,比如计时器和事件监听器

🏫新生命周期的替代


getDerivedStateFromProps

🎀1. 静态方法,第一次的初始化组件以及后续的更新过程中(包括自身状态以及父传子),返回一个对象作为新的state,返回null则说明不需要在这里更新state

🎀2. 适用于 第一次 和 后续更新 都 重复的逻辑

  state={
      myname:'zhangsan'
  }
  //componentWillMount 初始化
  static getDerivedStateFromProps(nextProps,nextState){
    return{
        //此处此myname将覆盖其他地方的myname
        myname:nextState.myname
    }
  }
  render() {
    return (
      <div>
        <button onClick={()=>{
            this.setState({
                myname:'lisi'
            })
        }}>click</button>
        {this.state.myname}
      </div>
    )
  }
}

注意:此方法中的属性 会覆盖 其他地方相同的属性(即使再次进行render执行或this.setState修改)

getSnapshotBeforeUpdate

取代了componentWillUpdate,触发时间为update发生的时候,在render之后dom渲染之前 返回一个值,作为componentDidUpdate的第三个参数

getSnapshotBeforeUpdate(prevProps,prevState){
    //组件能在发生更新之前从 DOM 中捕获一些信息(例如,滚动位置)
    return "aaa"//snapshotValue
}
..............................
componentDidUpdate(preProps,preState,snapshotValue){
    console.log(snapshotValue)
    //"aaa"
}

🚚react中性能优化方案

shouldComponentUpdate

控制组件自身或者子组件是否需要更新,尤其在子组件非常多的情况下,需要进行优化

PureComponent


PureComponent会帮你比较新props跟旧的props,新的state和老的state(值相等,或者对象含有相同的属性、且属性值相等),决定shouldcomponentUpdate 返回true或者false,从而决定要不要呼叫render function

import React, { PureComponent } from 'react'
export default class App extends PureComponent {}

注意:如果 state或props 永远都会变(比如倒计时),但PureComponent并不会比较快,因为shallowEqual也需要花时间

🎉🎉🎉如有错误,请评论指出,thankyou~🎀🎀🎀

✨✨✨创作不易,如对您有帮助,欢迎给博主点赞收藏,给予鼓励哟💛

相关文章
|
1月前
|
前端开发 JavaScript
React 组件生命周期
React 组件生命周期
29 0
|
14天前
|
前端开发 JavaScript
react 组件的生命周期
React组件的生命周期包括从创建到销毁的各个阶段,如挂载(mounting)、更新(updating)和卸载(unmounting)。每个阶段都有特定的方法,用于控制组件的行为和状态,确保高效、有序地渲染和管理UI。
|
2月前
|
前端开发 JavaScript 开发者
介绍一下React生命周期
介绍一下React生命周期
97 9
|
1月前
|
存储 前端开发 JavaScript
深入理解React组件的生命周期与Hooks
【10月更文挑战第7天】深入理解React组件的生命周期与Hooks
80 0
|
3月前
|
前端开发 JavaScript
React的生命周期演示-新(12)
【8月更文挑战第15天】React的生命周期演示-新
49 5
React的生命周期演示-新(12)
|
3月前
|
前端开发 JavaScript
React的生命周期简介(十)
【8月更文挑战第15天】React的生命周期简介
46 2
React的生命周期简介(十)
|
2月前
|
前端开发 API UED
React组件生命周期详解
【9月更文挑战第4天】在React应用开发中,掌握组件生命周期对于管理状态和属性至关重要,并能有效提升应用性能。本文详细介绍了React组件生命周期的三个阶段:挂载、更新和卸载,并通过代码示例展示了如何避免状态更新导致的死循环及优化网络请求等问题,帮助开发者构建更高效、可维护的应用。
78 2
|
3月前
|
前端开发 JavaScript
React 组件的生命周期阶段详解
【8月更文挑战第30天】
48 7
|
3月前
|
前端开发 JavaScript
React 组件生命周期方法详解
【8月更文挑战第30天】
47 5
|
3月前
|
前端开发 JavaScript
React的生命周期演示-旧(11)
【8月更文挑战第15天】React的生命周期演示-旧(11)
33 3