深入浅出 useEffect:React 函数组件中的副作用处理详解

news/2025/2/22 4:42:51/

useEffect 是 React 中的一个钩子函数,用于处理函数组件中的副作用操作,如发送网络请求、订阅消息、手动修改 DOM 等。下面是 useEffect 的用法总结:

  1. 基本用法
import React, { useState, useEffect } from 'react';function Example() {const [count, setCount] = useState(0);useEffect(() => {// 在这里执行副作用操作console.log('useEffect executed');}, []); // 传入空数组,表示只在组件挂载时执行一次return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}
  1. 处理 cleanup

在组件卸载或者依赖项变化前执行清理操作,以避免内存泄漏。

import React, { useState, useEffect } from 'react';function Example() {const [count, setCount] = useState(0);useEffect(() => {// 在这里执行副作用操作console.log('useEffect executed');// 返回一个清理函数return () => {console.log('Cleanup executed');};}, []); // 传入空数组,表示只在组件挂载和卸载时执行return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}
  1. 处理依赖项变化

当依赖项变化时,重新执行副作用操作。

import React, { useState, useEffect } from 'react';function Example() {const [count, setCount] = useState(0);const [name, setName] = useState('');useEffect(() => {// 在这里执行副作用操作console.log(`Hello, ${name}! You clicked ${count} times.`);}, [count, name]); // 当 count 或 name 变化时,重新执行副作用操作return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button><input type="text" value={name} onChange={e => setName(e.target.value)} /></div>);
}

注意:

  • 如果不传递第二个参数,那么每次组件重新渲染时都会执行副作用操作。
  • 如果传递空数组作为第二个参数,那么只在组件挂载时执行一次副作用操作。
  • 如果传递了依赖项数组,那么只有当依赖项发生变化时,才会重新执行副作用操作。
  • 在清理函数中,可以访问到当前的 state 和 props,但是不能修改它们。

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

相关文章

Windows通过修改host文件加速github访问的配置

修改hosts文件 Windows电脑打开 C:\Windows\System32\drivers\etc文件夹&#xff0c;使用记事本打开hosts文件&#xff0c;添加如下内容。 # GitHub Start # Last update at 2024-04-09 14:42:14 (Beijing Time) 140.82.112.5 api.github.com 185.199.108.153 assets-cdn.gi…

Docker搭建Mariadb

1. Mariadb Docker 镜像功能介绍&#xff1a; MariaDB 是一个开源的关系型数据库管理系统&#xff0c;是 MySQL 的一个分支&#xff0c;兼容性很高&#xff0c;提供了稳定、高性能的数据库服务。Mariadb Docker 镜像将 MariaDB 打包为 Docker 容器&#xff0c;使得在不同的环境…

REST API实战演练之JavaScript使用Rest API

咱们前面讲了一下如何创建REST API 假期别闲着&#xff1a;REST API实战演练之创建Rest API-CSDN博客 又讲了java客户端如何使用REST API 假期别闲着&#xff1a;REST API实战演练之客户端使用Rest API-CSDN博客 接下来咱们看看JavaScript怎么使用REST API。 一、新建一个…

51单片机+TN901非接触式红外测温设计论文与源码PCB等资料

1、摘要 温度测量技术应用十分广泛&#xff0c;而且在现代设备故障检测领域中也是一项非常重要的技术。但在某些应用领域中&#xff0c;要求测量温度用的传感器不能与被测物体相接触&#xff0c;这就需要一种非接触的测温方式来满足上述测温需求。本论文正是应上述实际需求而设…

Python学习笔记11 - 列表

1. 列表的创建与删除 2. 列表的查询操作 3. 列表的增、删、改操作 4. 列表元素的排序 5. 列表生成式

React中State管理的4 个关键解决方案

在 React 应用开发中,状态(state)管理是非常重要的一部分。合理地管理状态可以确保组件的行为正确,提高应用的可维护性和性能。然而,在实际使用 React 的 state 时,开发者常常会遇到一些常见的问题和陷阱。 本文将从解决问题的角度,总结 React 中 state 管理的4个关键技巧: 使…

2024 抖音欢笑中国年(三):编辑器技巧与实践

前言 本次春节活动中&#xff0c;我们大部分场景使用内部的 SAR Creator互动方案来实现。 SAR Creator 是一款基于 TypeScript 的高性能、轻量化的互动解决方案&#xff0c;目前支持了Web和字节内部跨端框架平台&#xff0c;服务于字节内部的各种互动业务&#xff0c;包括但不限…

Docker内更新Jenkins详细讲解

很多小伙伴在Docker中使用Jenkins时更新遇到困难&#xff0c;本次结合自己的实际经验&#xff0c;详细讲解。根据官网Jenkins了解以下内容&#xff1a; 一、Jenkins 是什么? Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测…