当前位置: 首页 > news >正文

React 生命周期 - useEffect 介绍

在 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,否则会锁定更新statereturn null// return {a:11}}
http://www.lryc.cn/news/451067.html

相关文章:

  • OpenCV-指纹识别
  • IPD的核心思想
  • 如何在算家云搭建MVSEP-MDX23(音频分离)
  • 常用的Java安全框架
  • 使用 PHP 的 strip_tags函数保护您的应用安全
  • 您的计算机已被Lockbit3.0勒索病毒感染?恢复您的数据的方法在这里!
  • 经典sql题(十二)UDTF之Explode炸裂函数
  • 【AIGC】ChatGPT提示词解析:如何打造个人IP、CSDN爆款技术文案与高效教案设计
  • 【Ubuntu】Ubuntu常用命令
  • 架构设计笔记-5-软件工程基础知识-2
  • [网络]抓包工具介绍 tcpdump
  • 基于STM32和FPGA的射频数据采集系统设计流程
  • 自动变速箱系统(A/T)详细解析
  • 【Kubernetes】常见面试题汇总(四十三)
  • OpenCL 学习(1)---- OpenCL 基本概念
  • 自定义注解加 AOP 实现服务接口鉴权以及内部认证
  • 《软件工程概论》作业一:新冠疫情下软件产品设计(小区电梯实体按钮的软件替代方案)
  • 基于Ernie-Bot打造语音对话功能
  • 动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络
  • ROS理论与实践学习笔记——2 ROS通信机制之服务通信
  • 技术成神之路:设计模式(十八)适配器模式
  • 图神经网络:处理复杂关系结构与图分类任务的强大工具
  • LeetCode: 1971. 寻找图中是否存在路径
  • mysql 查询表所有数据,分页的语句
  • TI DSP TMS320F280025 Note13:CPUtimer定时器原理分析与使用
  • Australis 相機率定軟體說明
  • C++入门(有C语言基础)
  • 第四届高性能计算与通信工程国际学术会议(HPCCE 2024)
  • 负载均衡架构解说
  • 【异常数据检测】孤立森林算法异常数据检测算法(数据可视化 Matlab语言)