React 生命周期 - useEffect 介绍

news2024/12/27 1:52:22

在 React 中,useEffect 钩子可以被看作是函数组件中的一种副作用管理工具,它的行为可以模拟类组件中的不同生命周期方法。useEffect 的执行时机取决于其依赖项数组(第二个参数)的设置方式。

根据 useEffect 的使用方式,它可以对应以下几种类组件生命周期方法:

1、 componentDidMount(组件挂载)

当你传递一个空的依赖数组 [] 时,useEffect 相当于 componentDidMount,即只在组件首次挂载时运行。

useEffect(() => {
  // 只在组件首次挂载时运行
  console.log('Component mounted');
}, []); // 空数组作为依赖项

等效于类组件的:

componentDidMount() {
  console.log('Component mounted');
}

2、 componentDidUpdate(组件更新)

如果 useEffect 的依赖数组中包含某些特定的状态或 props,当这些值发生变化时,useEffect 会在组件更新时重新执行,相当于 componentDidUpdate。

useEffect(() => {
  // 只在组件首次挂载时运行
  console.log('Component mounted');
}, []); // 空数组作为依赖项

等效于类组件的:

componentDidUpdate(prevProps, prevState) {
  if (prevState.someState !== this.state.someState) {
    console.log('Component updated because "someState" changed');
  }
}

3、 componentWillUnmount(组件卸载)

useEffect 可以返回一个清理函数,这个清理函数在组件卸载时(或依赖项更新时)执行,相当于 componentWillUnmount。

useEffect(() => {
  console.log('Component mounted');

  return () => {
    console.log('Component will unmount');
  };
}, []); // 空数组,表示只在卸载时清理

等效于类组件的:
componentWillUnmount() {
console.log(‘Component will unmount’);
}

4、 componentDidMount + componentDidUpdate

如果不传递依赖数组,useEffect 会在每次组件渲染后执行,相当于同时模拟了 componentDidMount 和 componentDidUpdate。

useEffect(() => {
  console.log('Component mounted or updated');
});

等效于类组件的:

componentDidMount() {
  console.log('Component mounted');
}

componentDidUpdate() {
  console.log('Component updated');
}

5、React生命周期总结

React 17版本之前
在这里插入图片描述

React 17版本之后
在这里插入图片描述
在新的生命周期中,react弃用了componentWillMount、componentWillReceiveProps、componentWillUpdate这三个钩子,取而代之的是getDerivedStateFromProps,其实就是把那三个钩子的含义融入到了这一个钩子中,写法如下:

static getDerivedStateFromProps(props, state) {
 console.log('getDerivedStateFromProps---props, state:', props, state)
 // 如果return null 则依然以原来的规则更新state,否则会锁定更新state
 return null
 // return {a:11}
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在校大学生想从事网络安全工程师,来听听过来人的经验,你会少走很多弯路_学会大学的专业课之后可以去网络安全嘛

大家好!一直以来都有一些大学生粉丝私信向我“取经”,看得出很多人对前路多多少少都有些迷茫。 因此,我将大家的问题整理了一下,主要有这几点: 1.国内网安工程师薪资水平? 2.网安行业真实前景?…

怎么提取视频里的音频?非常简单的提取音频方法

怎么提取视频里的音频?在现代数字媒体环境中,视频和音频的结合已成为信息传播和创作的重要手段。随着互联网的发展,视频内容日益丰富,从社交媒体短视频到在线课程,再到电影和纪录片,音频在这些内容中的角色…

全解析:如何评估PLM系统的性价比?

在当今竞争激烈的市场环境中,企业为了提升产品创新能力、优化生产流程、提高市场响应速度,纷纷引入PLM产品生命周期管理系统。然而,面对市场上琳琅满目的PLM系统,如何评估其性价比,成为企业决策的重要课题。本文将从多…

高清视频格式转换软件 豌豆狐 WonderFox HD Video Converter v27.7.0 中文授权版

WonderFox HD Video Converter Factory Pro 是一款来自国外团队开发的视频编辑和转换软件。它的强大之处在于支持数十种视频格式和设备专用格式之间的互相转换,甚至可以处理HD超清和4K极清视频!开启显卡加速后,转换速度飞快,效率超…

LeetCode讲解篇之3. 无重复字符的最长子串

文章目录 题目描述题解思路代码实现 题目描述 题解思路 因为我们需要求无重复字符的最长子串,这个我们首先需要想到使用滑动窗口,窗口内记录无重复的子串的所有字符,移动窗口的右边界时,发现当前字符在窗口内已经出现&#xff0c…

【LeetCode】动态规划—120. 三角形最小路径和(附完整Python/C++代码)

动态规划—120. 三角形最小路径和 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化5. 小总结 代码实现PythonPython代码实现Python 代码解释 CC代码实现C 代码解释 总结: 前言 三角形最小路径和 是动态…

CHI协议中的LPID

总目录: CHI协议简读汇总-CSDN博客https://blog.csdn.net/zhangshangjie1/article/details/131877216 当某个requester包含多个logically separate processing agent时,使用这个LPID; LPID在如下的opcode下,取值需要正确&#…

无人机在抗洪方面的作用!

一、实时监测与灾情评估 无人机能够迅速抵达受灾区域上空,通过搭载的高清摄像头、红外热成像仪等传感器,实时传输灾区图像和视频,为救援指挥中心提供第一手资料。有助于快速了解灾情,从而制定科学合理的救援方案。 二、搜救定位…

SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器

SpringMVC九大内置组件之HandlerMapping处理器映射器-AbstractHandlerMethodMapping类以及子类RequestMappingHandlerMapping如何将Controller修饰的注解类以及类下被注解RequestMapping修饰的方法存储到处理器映射器中。 从RequestMappingHandlerMapping寻找: AbstractHandle…

②三菱Modbus主站MELSEC转ModbusRTU/ASCII工业MELSEC网关串口服务

三菱Modbus主站MELSEC转ModbusRTU/ASCII工业MELSEC网关串口服务https://item.taobao.com/item.htm?ftt&id834634632647 MELSEC 通信单元 MELSEC 转 RS485 (接上一章) 动作指示灯 电源指示灯(PWR) 表示 MS-A1-80X1 通讯模块是否处于通电中。…

用ChatGPT工作提效,这些方法太实用了!

被任务和紧迫的截止日期压垮了吗?ChatGPT 是提升工作效率的关键武器。探索这篇指南,快速提升您的工作效率! ChatGPT 在现代职场中的角色 随着数字时代的到来,技术进步彻底改变了商业世界,自动化和效率已成为企业保持…

怎样才能设计出全面且详细的测试要点?

今天想跟大家分享一个案例,关于一个测试场景引发的测试要点思考。 废话不多说,上菜! 情况介绍 某天,开发同事提交了一个功能优化单,大概情况就是:为了节省内存使用,开启了一个配置&#xff0…

求解线性方程的方法步骤(含例题),附解线性方程计算器

大家好,这里是效率办公指南! 📐 在数学和工程问题中,线性方程是一类非常基础且常见的问题。无论是解决简单的一元一次方程,还是复杂的多元线性方程组,都有一定的方法和步骤可以遵循。今天,我们…

体育课评分系统小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,点明册管理,体育教案管理,教学评分管理,学生心率管理,身体素质测评管理,教学比赛成绩管理 微信端账号功能包括&#xf…

Autosar CP系列:设计模式之仲裁模式和信号质量模式

本文讲解关于Autosar的另外两个设计模式:仲裁模式和信号质量模式,上篇花大量篇幅讲解了《传感器执行器模式》。 1.仲裁模式 为了解决多个不同提供者或请求者之间的仲裁问题,引入一个新的组件,这个组件的作用是管理所有来自不同请…

安防监控/智慧安防EasyCVR视频汇聚监控平台无法启动并报错“no space left on service”是什么原因?

视频汇聚/安防监控/智慧安防EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。平台可以引入AI智能分析能力,能够实现对视频中的特…

Spring Cloud面试题收集

Spring Cloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。…

基于SpringBoot - Netty框架的云快充协议(充电桩协议)

云快充协议是一种标准通信协议,主要用于电动车与充电桩之间的数据交换。该协议包含了充电请求、状态查询、支付等多个功能模块。这些功能的实现不仅需要对协议进行深入理解,还需要编写相应的代码进行封装。 软件架构 1、提供云快充底层桩直连协议&#…

“DNA亲和纯化测序:汇智生物的精准分析“

🌱 汇智生物 | 专注农业&植物基因组分析 🌱 🎓 教授【优青】团队亲自指导!提供专业实验设计、数据分析、SCI论文辅助等全方位服务。精准高效,为农植物科研保驾护航! 🔬 专业实验外包服务&am…

100个超有用的Python知识点!

一、基础语法 1.变量的定义与赋值。 2.不同数据类型(整数、浮点数、字符串、布尔值、列表、元组、字典、集合)的使用。 3.运算符(算术、比较、逻辑、赋值、位运算等)。 4.控制流语句(if-else、for 循环、while 循环…