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

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

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

  1. 基本用法
import React, { useState, useEffect } from 'react';function Example() {const [count, setCount] = useState(0);useEffect(() => {// 在这里执行副作用操作,模拟console.log('useEffect executed');}, []); // 不传第二个参数,每次组件状态更新都会执行;// 传入第二个参数,是个空数组,表示只在组件挂载时执行一次,模拟 componentDidMount (组件挂载完成);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');// 返回一个 清理函数,模拟 componentWillUnmount (组件卸载前清理),在组件卸载或者依赖项变化前执行清理操作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(() => {// 在这里执行副作用操作,模拟 componentDidUpdate (组件完成更新)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,但是不能修改它们。

相关文章:

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

useEffect 是 React 中的一个钩子函数&#xff0c;用于处理函数组件中的副作用操作&#xff0c;如发送网络请求、订阅消息、手动修改 DOM 等。下面是 useEffect 的用法总结&#xff1a; 基本用法 import React, { useState, useEffect } from react;function Example() {cons…...

《QT实用小工具·十九》回车跳转到不同的编辑框

1、概述 源码放在文章末尾 该项目实现通过回车键让光标从一个编辑框跳转到另一个编辑框&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : p…...

基本的数据类型在16位、32位和64位机上所占的字节大小

1、目前常用的机器都是32位和64位的&#xff0c;但是有时候会考虑16位机。总结一下在三种位数下常用的数据类型所占的字节大小。 数据类型16位(byte)32位(byte)64位(byte)取值范围char111-128 ~ 127unsigned char1110 ~ 255short int / short222-32768~32767unsigned short222…...

关注招聘 关注招聘 关注招聘

&#x1f525;关注招聘 &#x1f525;关注招聘 &#x1f525;关注招聘 &#x1f525;开源产品&#xff1a; 1.农业物联网平台开源版 2.充电桩系统开源版 3.GPU池化软件(AI人工智能训练平台/推理平台) 开源版 产品销售&#xff1a; 1.农业物联网平台企业版 2.充电桩系统企业…...

Django框架设计原理

相信大多数的Web开发者对于MVC&#xff08;Model、View、Controller&#xff09;设计模式都不陌生&#xff0c;该设计模式已经成为Web框架中一种事实上的标准了&#xff0c;Django框架自然也是一个遵循MVC设计模式的框架。不过从严格意义上讲&#xff0c;Django框架采用了一种更…...

Linux ARM平台开发系列讲解(QEMU篇) 1.2 新添加一个Linux kernel设备树

1. 概述 上一章节我们利用QEMU成功启动了Linux kernel,但是细心的小伙伴就会发现,我们用默认的defconfig是没有找到设备树源文件的,但是又发现kernel启动时候它使用了设备树riscv-virtio,qemu,这是因为qemu用了一个默认的设备树文件,该章节呢我们就把这个默认的设备树文件…...

OSPF动态路由实验(思科)

华为设备参考&#xff1a; 一&#xff0c;技术简介 OSPF&#xff08;Open Shortest Path First&#xff09;是一种内部网关协议&#xff0c;主要用于在单一自治系统内决策路由。它是一种基于链路状态的路由协议&#xff0c;通过链路状态路由算法来实现动态路由选择。 OSPF的…...

MyBatis 等类似的 XML 映射文件中,当传入的参数为空字符串时,<if> 标签可能会导致 SQL 语句中的条件判断出现意外结果。

问题 传入的参数为空字符串&#xff0c;但还是根据参数查询了。 原因 在 XML 中使用 标签进行条件判断时&#xff0c;需要明确理解其行为。在 MyBatis 等类似的 XML 映射文件中&#xff0c; 标签通常用于动态拼接 SQL 语句的条件部分。当传入的参数 riskLevel 为空字符串时…...

git的安装

git的安装 在CentOS系统上安装git时&#xff0c;我们可以选择yum安装或者源码编译安装两种方式。Yum的安装方式的好处是比较简单&#xff0c;直接输入”yum install git”命令即可。但是Yum的安装的话&#xff0c;不好控制安装git的版本。如果我们想选择安装git的版本&#xf…...

蓝桥杯嵌入式模板(cubemxkeil5)

LED 引脚PC8~PC15&#xff0c;默认高电平&#xff08;灭&#xff09;。 此外还要配置PD2为输出引脚&#xff08;控制LED锁存&#xff09; &#xff0c;默认低电平&#xff08;锁住&#xff09;&#xff01;&#xff01;&#xff01; #include "led.h"void led_disp…...

ELFK (Filebeat+ELK)日志分析系统

一. 相关介绍 Filebeat&#xff1a;轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat&#xff0c;并指定目录与日志格式&#xff0c;Filebeat 就能快速收集数据&#xff0c;并发送给 logstash 进或是直接发给 Elasticsearch 存储&#xff0c;性能上相…...

HttpClient、OKhttp、RestTemplate接口调用对比( Java HTTP 客户端)

文章目录 HttpClient、OKhttp、RestTemplate接口调用对比HttpClientOkHttprestTemplate HttpClient、OKhttp、RestTemplate接口调用对比 HttpClient、OkHttp 和 RestTemplate 是三种常用的 Java HTTP 客户端库&#xff0c;它们都可以用于发送 HTTP 请求和接收 HTTP 响应&#…...

[旅游] 景区排队上厕所

人有三急&#xff0c;急中最急是上个厕所要排队&#xff0c;而且人还不少&#xff01;这样就需要做一个提前量的预测&#xff0c;万一提前量的预测&#xff0c;搞得不当&#xff0c;非得憋出膀光炎&#xff0c;或者尿裤子。尤其是女厕所太少&#xff01;另外一点是儿童根本就没…...

三 maven的依赖管理

一 maven依赖管理 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中&#xff0c;避免出现版本冲突和依赖缺失等…...

iperf3 网络性能测试

iperf3测试 1、iperf3简介 iperf3是一个主动测试网络带宽的工具&#xff0c;可以测试iTCP、UDP、SCTP等网络带宽&#xff1b;可以通过参数修改网络协议、缓冲区、测试时间、数据大小等&#xff0c;每个测试结果会得出吞吐量、带宽、重传数、丢包数等测试结果 2、参数详解 通…...

08 Php学习:if语句、Switch语句

PHP 条件语句 当您编写代码时&#xff0c;您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中&#xff0c;提供了下列条件语句&#xff1a; if 语句 - 在条件成立时执行代码 if…else 语句 - 在条件成立时执行一块代码&#xff0c;…...

二分查找的边界问题是怎么产生的?

总结&#xff1a;二分查找的目标有两个&#xff0c;一个是左区件的右边界&#xff0c;一个是右区间的左边界 如何去理解二分的过程&#xff1f; 如果要查找的是左区间的右边界&#xff1a; 可以将[l, r]理解一个集合&#xff0c;这个集合范围内的数都有可能是最后需要得到的…...

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套

华为 2024 届校园招聘-硬件通⽤/单板开发——第十套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c;加我…...

五子棋:不会下五子棋也没关系,会用Java写五子棋就行

关注公号“微澜网络”获取完整源代码&#xff01; 效果展示&#xff1a; 目录 效果展示&#xff1a; 导语&#xff1a; 游戏介绍&#xff1a; 程序设计&#xff1a; 1.游戏规则和功能&#xff1a; 2.用户界面设计&#xff1a; 3.程序架构设计&#xff1a; 4.可扩展性和灵…...

【VUE】使用Vue和CSS动画创建滚动列表

使用Vue和CSS动画创建滚动列表 在这篇文章中&#xff0c;我们将探讨如何使用Vue.js和CSS动画创建一个动态且视觉上吸引人的滚动列表。这个列表将自动滚动显示项目&#xff0c;类似于轮播图的方式&#xff0c;非常适合用于仪表盘、排行榜或任何需要在有限空间内展示项目列表的应…...

nbiot-arduino库:Quectel BC95/BC68模组快速接入指南

1. 项目概述nbiot-arduino是一个面向嵌入式开发者的轻量级 Arduino 库&#xff0c;专为驱动 Quectel 公司推出的 NB-IoT&#xff08;Narrowband IoT&#xff09;通信模组而设计。该库并非通用 AT 指令封装器&#xff0c;而是聚焦于 NB-IoT 物联网场景下的典型交互范式——以低功…...

QSS样式表避坑指南:为什么你的Qt界面美化总是不生效?

QSS样式表深度解析&#xff1a;从失效原理到高效美化实战 在Qt界面开发中&#xff0c;QSS&#xff08;Qt Style Sheets&#xff09;作为界面美化的核心工具&#xff0c;其重要性不亚于CSS之于网页设计。然而许多开发者在使用过程中常遇到样式失效、优先级混乱等问题。本文将系统…...

告别繁琐安装:用快马平台在线IDE实现零配置编程初体验

最近在尝试学习编程时&#xff0c;发现很多新手都会卡在开发环境配置这一步。传统的IDE安装过程不仅耗时&#xff0c;还可能遇到各种环境变量配置问题。作为一个过来人&#xff0c;我想分享一个更简单的解决方案——直接在浏览器里就能完成编程初体验。 为什么需要在线IDE 刚开…...

从CTF题到实战:手把手教你用Python的sympy和gmpy2破解RSA变种(附完整脚本)

从CTF题到实战&#xff1a;手把手教你用Python的sympy和gmpy2破解RSA变种&#xff08;附完整脚本&#xff09; 在网络安全竞赛和实际渗透测试中&#xff0c;RSA加密算法的各种变种经常出现。这些变种往往通过引入特殊的数学性质或构造方式&#xff0c;使得标准的RSA攻击方法失效…...

Ubuntu20.04+ROS Noetic下Quad_sdk四足机器人环境搭建全攻略(附常见错误排查)

Ubuntu 20.04与ROS Noetic环境下Quad-SDK四足机器人开发环境搭建实战指南 四足机器人技术正在从实验室走向更广阔的应用场景&#xff0c;而Quad-SDK作为一款开源的机器人控制框架&#xff0c;凭借其优秀的运动控制算法和地形适应能力&#xff0c;成为许多开发者的首选。本文将带…...

OpenLiteSpeed实战踩坑记录:为什么我最终回归了LNMP环境?

OpenLiteSpeed实战反思&#xff1a;为什么复杂WordPress环境更适合LNMP&#xff1f; 最近在技术社区里&#xff0c;OpenLiteSpeed被频繁提及&#xff0c;尤其是它宣称的高性能PHP处理能力吸引了不少WordPress站长的注意。作为一个长期使用LNMP环境的开发者&#xff0c;我也被这…...

API密钥中转站,低成本实现Token自由

最近很多小伙伴都在用AI开发项目 编写程序&#xff0c;或者安装部署龙虾&#xff08;OpenClaw&#xff09;&#xff0c;但是国内的模型很多又满足不了自己的要求&#xff0c;国外的模型要么是不方便购买&#xff0c;要么是价格太贵&#xff0c;每天都要消耗几十上百美元&#x…...

NOJ编程竞赛中的五大常见错误类型及高效调试技巧

1. NOJ编程竞赛错误类型全景解析 第一次参加NOJ在线编程竞赛时&#xff0c;看到满屏的WA、CE、RE、TE错误提示&#xff0c;我整个人都是懵的。直到后来在实战中踩过无数坑&#xff0c;才发现这些错误其实都有规律可循。最常见的五大错误类型就像编程路上的五个拦路虎&#xff0…...

DownKyi:3分钟掌握B站视频下载的高效方法

DownKyi&#xff1a;3分钟掌握B站视频下载的高效方法 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 项…...

cv_unet_image-colorization新手入门:从安装到上色的完整流程

cv_unet_image-colorization新手入门&#xff1a;从安装到上色的完整流程 你是不是有一些珍贵的黑白老照片&#xff0c;想要让它们重现当年的色彩&#xff1f;或者你是一名开发者&#xff0c;想要快速体验AI图像上色的魅力&#xff1f;今天&#xff0c;我将带你从零开始&#…...