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

embedded/2024/10/9 3:24:14/

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/embedded/103314.html

相关文章

Nosql数据库redis集群配置详解

一、Redis的安装 环境介绍: 一主双从:10(redis-node1)主,20(redis-node2) 30(redis-node3)从——使用的是红帽9.1系统 源码安装redis [rootredis-node1 ~]# tar zxf red…

框架 +【Mybatis】概述 以及 基础环境搭建

目录 什么是框架? java后端框架包括 Mybatis概述 1、背景介绍 2、mybatis介绍 Mybatis环境搭建 1.创建一个maven项目 2.导入mysql数据库驱动包 导入mybatis依赖的jar包 3.创建一个全局的mybatis配置文件 4.创建数据库,创建表,准备数据 5.创建一个访问接口…

回归预测|基于卷积神经网络-鲸鱼优化-最小二乘支持向量机的数据回归预测Matlab程序 CNN-WOA-LSSVM

回归预测|基于卷积神经网络-鲸鱼优化-最小二乘支持向量机的数据回归预测Matlab程序 CNN-WOA-LSSVM 文章目录 一、基本原理1. 数据预处理2. 特征提取(CNN)3. 参数优化(WOA)4. 模型训练(LSSVM)5. 模型评估和优…

在yocto上编译处工具链

1.设置编译环境 DISTROfsl-imx-wayland MACHINEimx93evk source rently-setup-release.sh -b build 2.编译工具链 bitbake meta-toolchain 编译之后会在build/tmp/deploy/sdk目录下找到fsl-imx-wayland-glibc-x86_64-meta-toolchain-armv8a-imx93evk-toolchain-6.6-scarthg…

讯鹏科技智慧公厕专业供应商,解读智慧公厕有哪些奥秘

在当今科技日新月异的时代,讯鹏科技作为智慧公厕专业供应商,以其先进的技术和创新的解决方案,为人们带来了全新的公共卫生体验。那么,智慧公厕究竟有哪些奥秘呢?让我们一同解读。 一、智慧公厕硬件 1. 环境监测传感器&…

vscode 20 个实用插件

Visual Studio Code(VSCode)是一个功能强大的代码编辑器,拥有丰富的插件生态系统,可以帮助开发者提高工作效率。以下是一些推荐的VSCode插件,它们在2024年被认为是非常实用的: Prettier - 一个专注于代码格…

Oracle迁移至openGauss的工具:ora2op的安装配置

目录 前言 1. ora2op的下载 1.1 下载地址 1.2 ora2op 介绍 2. ora2op的安装 2.1 安装perl的依赖包 2.2 安装连接Oracle数据库的模块 2.3 安装ora2op 2.4 安装连接openGauss数据库的模块 前言 本工具是使用perl,在安装时会遇到各种问题,解决方式…

WPF- vs中的WPF应用项目模板 如何自己实现

读书笔记 1. 单个 c#文件的 空白window应用程序 (只展示了一个button按钮) 2.C#文件 和xml文件 的空白window程序 .xml文件作为程序的资源 (只一个button按钮) 3. xmal和c#共同编译 形如使用VS 创建WPF应用项目模板 1.新建一个wpf空白项目 ,添加一个主c#文件 和xaml文件(属…