React(三) ——新、旧生命周期
创始人
2025-05-28 04:01:20
0

🧁个人主页:个人主页

✌支持我 :点赞👍收藏🌼关注🧡

文章目录

    • ⛳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. 将要改变数据
  2. 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将覆盖其他地方的mynamemyname:nextState.myname}}render() {return (
{this.state.myname}
)} }

注意:此方法中的属性 会覆盖 其他地方相同的属性(即使再次进行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~🎀🎀🎀
✨✨✨创作不易,如对您有帮助,欢迎给博主点赞收藏,给予鼓励哟💛

相关内容

热门资讯

孩子沉迷北京龙威互动游戏,23... 数字化浪潮席卷的当下,游戏已深度融入大众生活,尤其对未成年人而言,游戏的吸引力常使其难以自拔,进而引...
两个人去广西玩4天跟团要多少钱... 桂林,这座位于广西东北部的城市,就像一颗镶嵌在大地上的明珠,散发着独特的魅力。“桂林山水甲天下”,这...
2025中国文旅博览会成了内蒙... 内蒙古馆。 “乡见之美”AR乡村虚拟旅游区排队等候,烧麦毛绒手办“秒空”,白桦汁被成箱买走……9月1...
平和打包厂,重回少年时 假设你是一个年轻人 打算来武汉旅游 “老汉口”毫无疑问 将是你旅程中的重要一站 你在小红书上做攻略 ...
国庆北京六日游预算多少?省钱畅... 北京,这座古老而现代的都城,承载着深厚的历史底蕴与璀璨的文化瑰宝,一直是无数游客心中的向往之地。近期...
“秋爽武汉·17游长江”活动上... 9月14日下午,在2025中国文化旅游产业博览会“知音湖北·超级文旅日”启动仪式上,武汉文化旅游集团...
内蒙古歌舞在2025中国文化旅... 优美舞姿。 9月14日,历时3天的2025中国文化旅游产业博览会圆满收官,内蒙古歌舞宛如一颗璀璨明珠...
五营红松林海景区旅行攻略 家人们,今天我要给你们好好介绍一下伊春市五营红松林海景区。它地处黑龙江省北段,属于小兴安岭南坡林区,...
江海相约 邂逅启东的文旅“高光... 日出江海 韵动圆陀角 徐昕摄 江风海韵交织,文旅繁花正盛。秋日清晨,第一缕阳光洒在波光粼粼海面上,启...
川北小城焕新颜!大蜀道不夜三国... 一场文旅消费革命在川北小城悄然兴起,由国艺中联打造的大蜀道不夜三国城凭借文化体验与消费场景的深度交融...
上海中学国际部(虹口校区):艺... 第六季“My Favorite Shanghai·爱上海的理由”青少年外语短视频征集展播活动由上海市...
广西五日游费用详情,带老人到桂... 在国内众多旅游胜地中,桂林宛如一颗璀璨的明珠,散发着独特的魅力。它以举世闻名的喀斯特地貌而著称,那连...
内蒙古3个体育旅游文化项目晋升... 记者从内蒙古自治区体育局获悉,9月13日,作为2025中国体育文化博览会、中国体育旅游博览会配套活动...
贵州5天4晚纯玩团,五日游品质... 贵州这条"山水与人文交织的秘境之路",终于被深度玩家发现了!作为国内唯一没有平原的省份,这里的喀斯特...
“万峰成林处 阳光黔西南”——... 9月14日,“万峰成林处 阳光黔西南”2025黔西南州城市营销暨文化旅游招商推介活动(武汉站),在武...
“来红叶柿岩晒个秋”即将启幕!... 齐鲁晚报·齐鲁壹点记者 乔显佳 通讯员 徐子晗时值淄博红叶柿岩旅游区开园五周年,景区特别推出首届“来...
太原到张家界旅游团报价是多少?... 前段时间我和朋友刚从张家界玩回来,真的被那里的山水美哭了!一开始也在网上到处查“太原到张家界旅游团报...
四川四日游攻略及费用,带娃国庆... 家人们,有没有和我一样,一到假期就想带着孩子来一场说走就走的旅行?四川,那可是一个充满魅力的地方,有...
安徽5日游费用详情,和父母到黄... 宝子们,如果你想去安徽旅游,那黄山绝对是绕不开的经典目的地。黄山,这座位于安徽省南部黄山市境内的名山...