【React】useEffect的使用场景与作用

news/2024/10/11 1:28:26/

useEffect 是 React 中的一个 Hook,用于在函数组件中执行副作用。副作用是指那些与渲染过程无关的操作,比如数据获取、订阅事件、手动操作 DOM、日志记录等。useEffect 允许你在函数组件中引入这些副作用,而不必依赖于类组件的生命周期方法(如 componentDidMountcomponentDidUpdatecomponentWillUnmount)。

useEffect 的使用场景和作用:

数据获取(Fetching Data):

1.当组件加载时,通过 API 请求获取数据。

示例:

javascript">useEffect(() => {fetch('https://api.example.com/data').then(response => response.json()).then(data => setData(data));
}, []); // 空依赖数组表示只在组件挂载时执行

2.订阅和取消订阅(Subscriptions):

你可以在组件挂载时订阅某些事件,并在组件卸载时取消订阅。
示例:

javascript">useEffect(() => {const handleResize = () => console.log('Window resized');window.addEventListener('resize', handleResize);return () => window.removeEventListener('resize', handleResize); // 清除副作用
}, []); // 空依赖数组表示只在组件挂载和卸载时执行

3.DOM 操作:

当你需要手动操作 DOM 元素时,可以使用 useEffect。
示例:

javascript">useEffect(() => {document.title = `You clicked ${count} times`;
}, [count]); // 依赖于 count,每次 count 改变时执行

4.清除副作用(Cleanup Effects):

在组件卸载或副作用更新之前清除副作用,以避免内存泄漏或不必要的操作。
例如:清除定时器、取消网络请求或移除事件监听器。
示例:

javascript">useEffect(() => {const timer = setTimeout(() => {console.log('This will run after 1 second');}, 1000);return () => clearTimeout(timer); // 在组件卸载时清除定时器
}, []); // 依赖数组为空,只在组件挂载和卸载时执行

useEffect 的依赖数组:

useEffect 接受两个参数:一个副作用函数和一个可选的依赖数组。
副作用函数:在组件渲染后执行。这个函数可以返回一个清除副作用的函数。

依赖数组:定义副作用何时重新执行。只有当数组中的依赖项发生变化时,副作用函数才会执行。

空数组 []:仅在组件挂载和卸载时执行副作用。

无数组:每次组件重新渲染时都会执行副作用。

带有依赖项的数组:当依赖项发生变化时才会重新执行副作用。

javascript">useEffect(() => {// 这段代码在组件挂载后运行console.log('Component mounted');// 返回的函数将在组件卸载时运行return () => {console.log('Component unmounted');};
}, []); // 空依赖数组意味着只在挂载和卸载时执行

小结:

useEffect 是 React 中处理副作用的主要工具。它可以模拟组件的生命周期钩子,并提供一种灵活且强大的方式来控制函数组件中的副作用行为。


http://www.ppmy.cn/news/1517957.html

相关文章

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图 1、本节实现的内容 上一节我们讨论了纹理贴图的相关基础操作,但上一节的纹理贴图操作基本上都是规则图形,包括圆形和球形虽然复杂一点,但是它也是规则的。这一节课我们要讨论一下,怎么在不规则图形上纹理贴图…

‌使用网站地图:‌优化网站结构,‌提升搜索引擎抓取效率

在网站优化策略中,‌使用网站地图是一项至关重要的措施。‌网站地图,‌特别是XML格式的网站地图,‌为搜索引擎提供了一个详细的网站结构蓝图,‌有助于蜘蛛更快地了解网站内容,‌发现新的或更新过的页面。‌以下是关于如…

基于单片机的人体红外感应报警系统设计

【摘要】 本设计采用单片机作为系统控制核心,以被动式红外人体感应的检测方式,把传感器检测到的信号输入单片机作为外部触发信号,通过软件编程方式控制声(蜂鸣器)光(LED 灯闪烁)报警电路的工作状…

HTML基础学习笔记

1.标题排版 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>大国重器</title> </head> …

Java经典框架之MyBatis

一、基本介绍 MyBatis 是一个非常流行的 Java 持久层框架&#xff0c;它提供了简单的方法来处理数据库中的数据。MyBatis 可以看作是 JDBC 的一个薄封装&#xff0c;它简化了 JDBC 代码的编写&#xff0c;同时提供了强大的功能&#xff0c;如动态 SQL、映射自定义对象到数据库记…

数据驱动未来:全球热门大数据平台精选

1. 概述 大数据基础服务平台是一种用于管理、存储、处理和分析大量数据的平台。它提供了一系列的大数据处理和分析工具&#xff0c;包括 Hadoop、Hive、HBase、Spark、Flink、Zookeeper、Kafka 等&#xff0c;使得企业和组织能够更好地理解和利用他们的数据。 2. 核心能力 数…

如何尽早地发现并抵御 DDoS 攻击?

近半年&#xff0c;随着软硬件服务的廉价化、规模化&#xff0c;国内外云厂商频繁遭受不明原因的大规模网络攻击&#xff0c;给很多网站带来了不良的影响。其实&#xff0c;DDoS 攻击这把「达摩斯之剑」一直高悬在各家互联网公司的头顶&#xff0c;虽然很多互联网企业对 DDoS 攻…

【如何在MacOS升级ruby版本】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…