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

react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)

什么是副作用操作?

useEffect 用于编写由渲染本身引起的对接组件外部的操作(官方称呼为:副作用操作)

以下情况会触发页面渲染

  • 初次加载页面(组的挂载)
  • 响应式变量发生变化,触发页面根据新值重新渲染(组件更新)
  • 关闭页面(组件卸载)

以下情况需要添加副作用操作

  • 页面初步渲染完成后,向服务器获取数据完成页面的最终渲染
  • 响应式变量发生变化时,先根据新值执行必要的其他业务逻辑,再进行最终的页面更新渲染
  • 关闭页面时,关闭定时器

useEffect 语法

useEffect 是 hook 函数

  • 第一个参数(必要): 自定义的处理函数(官方称呼为:副作用函数)
  • 第二个参数(可选): 依赖项

在这里插入图片描述

无依赖项

执行副作用函数的时机

  • 组件初次渲染后(组件挂载完成),在开发环境,会执行两次,生产环境仅执行一次
  • 组件更新渲染前(任一响应式变量变化都会触发!)
import { useEffect } from "react";function Demo() {useEffect(() => {console.log("执行了副作用函数");});return (<><div>你好</div></>);
}export default Demo;

依赖项为空数组 []

类似 vue 的生命周期 mounted

执行副作用函数的时机

  • 组件初次渲染后(组件挂载完成),在开发环境,会执行两次,生产环境仅执行一次
import { useEffect } from "react";function Demo() {useEffect(() => {console.log("执行了副作用函数");}, []);return (<><div>你好</div></>);
}export default Demo;

使用场景
初次渲染页面时访问接口加载页面数据

import { useEffect, useState } from "react";
import axios from "axios";function Demo() {const [list, setList] = useState([]);useEffect(() => {async function getList() {const res = await axios.get("http://localhost:3000/dataList");setList(res.data);}getList();}, []);return (<>{list.map((item) => (<div key={item.id}>{item.title}</div>))}</>);
}export default Demo;

依赖项为响应式变量构成的数组

类似 vue 的立即执行侦听器 watch

执行副作用函数的时机

  • 组件初次渲染后(组件挂载完成),在开发环境,会执行两次,生产环境仅执行一次
  • 响应式变量发生变化触发页面进行更新渲染前
import { useEffect, useState } from "react";function Demo() {const [name, setName] = useState("朝阳");useEffect(() => {// 在挂载和 name 更新时,都会执行!console.log("当前name值为:", name);}, [name]);function changeName() {setName("晚霞");}return (<><button onClick={changeName}>改名字</button></>);
}export default Demo;

清除副作用

最经典的场景即在组件卸载时清除计时器,以免内存泄露

father.jsx

import { useState } from "react";
import Child from "./child.jsx";function Father() {const [ifChild, setIfChild] = useState(true);function removeChild() {setIfChild(false);}return (<><button onClick={removeChild}>移除子组件</button>{ifChild && <Child />}</>);
}export default Father;

child.jsx

import { useEffect } from "react";function Child() {useEffect(() => {// 添加定时器const timer = setInterval(() => {console.log("执行了定时器");}, 1000);return () => {// 清除定时器clearInterval(timer);};});return (<><div><h1>我是子组件</h1></div></>);
}export default Child;

相关文章:

react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)

什么是副作用操作&#xff1f; useEffect 用于编写由渲染本身引起的对接组件外部的操作&#xff08;官方称呼为&#xff1a;副作用操作&#xff09; 以下情况会触发页面渲染 初次加载页面&#xff08;组的挂载&#xff09;响应式变量发生变化&#xff0c;触发页面根据新值重新…...

Excel 分组汇总后删除明细

有 Excel 数据如下所示&#xff1a; IDCriteria1Criteria2Criteria3Criteria4101210271239312381236123171826182918239182120182147 需要按 ID 分组汇总其余列&#xff0c;结果如下&#xff1a; IDCriteria1Criteria2Criteria3Criteria410121027123932561826939267 解法及简…...

docker runc升级1.1.12

上传runc-1.1.12制品至中控机 874e970eaa932a97de9888344ae08f24 runc.arm64 将所有节点的runc文件备份 所有节点(包括master+node) vim host [all] 10.1.0.183 ansible_password=Bigdata@Ksyun123 ansible_user=root ansible_port=22 10.1.0.249 ansible_password=Bigdata…...

C++接口:构建模块化与可扩展的软件架构

目录标题 1. 接口的定义与作用2. 抽象类作为接口3. 接口的设计原则4. 示例&#xff1a;使用接口实现多态5. 拓展&#xff1a;接口和类的区别6. 结论 在C编程中&#xff0c;接口是一种重要的设计模式&#xff0c;它定义了一组方法&#xff0c;这些方法可以被不同的类实现。接口在…...

【讲解下目标追踪】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

实时Linux对EtherCAT工业自动化协议的支持

在自动化技术和工业控制领域&#xff0c;实时通信网络的重要性不断增长。EtherCAT&#xff08;Ethernet for Control Automation Technology&#xff09;作为一种高效的工业以太网通信协议&#xff0c;因其出色的性能和灵活性而广受欢迎。而实时Linux作为影响最为广泛的开源实时…...

ViLT 浅析

ViLT 浅析 论文链接&#xff1a;ViLT 文章目录 ViLT 浅析创新点网络结构总结 创新点 本文先分析了4种不同类型的Vision-and-Language Pretraining(VLP) 其中每个矩形的高表示相对计算量大小&#xff0c;VE、TE和MI分别是visual embedding、text embedding和modality interact…...

7-117 死亡隧道

小毛驴要回家了,凭借着刚从老毛驴处学到的闪烁魔法,小毛驴信心满满地出发了。这一次它来到了另一条死亡隧道口,但是,小毛驴不知道死亡威胁随时存在,因为它所打算穿过的这条死亡隧道即将于T秒时间后坍塌。 已知小毛驴行走的速度是每秒17米,而小毛驴拥有的闪烁法术可以使它…...

java数据结构与算法(链表归并排序)

前言 链表的归并排序和数组的归并排序类似&#xff0c;只是在操作原有操作数组的基础上对链表进行操作。喜欢的可以试试吧。 实现原理 链表归并排序是一种常见的排序算法&#xff0c;它利用了归并排序的思想来对链表进行排序。与数组不同&#xff0c;链表在归并排序中的主要…...

最新网页版USB转串口芯片CH340中文规格书手册(20240511)

前言 南京沁恒的产品已经很成熟了&#xff0c;完全可替代国外USB转串口产品&#xff0c;不必迷信FT232&#xff0c;CP2102之类了。 另外&#xff0c;急着买芯片&#xff0c;直接跑过去的&#xff0c;看过几次妹子了:) CH340手册&#xff0c;基于网页3.3版本&#xff0c;规格书…...

关于 MongoDB 数据库基本操作的详细介绍

MongoDB 是一个基于分布式文件存储的数据库&#xff0c;其设计旨在提供高性能、可扩展性和易用性。以下是关于 MongoDB 数据库基本操作的详细介绍 一、MongoDB 简介 MongoDB 是一个面向文档的数据库&#xff0c;其数据存储在类似 JSON 的 BSON&#xff08;Binary JSON&#x…...

【网络基础】网络层 之 IP协议与分片、网段划分、IP地址分类、子网掩码与路由

文章目录 网络层1. IP协议段格式1.1 分片1.2 *为什么存在分片 / 分片是什么 ?*1.3 *如何理解 / 实现 分片与组装*1.4 深入具体&#xff1a;分片 和 组装 的过程1.5 为什么不推荐 分片 2. 网段划分2.1 举例&#xff1a;国际间通信 && 国家内通信2.2 理解网段划分 3. IP…...

C语言实现猜数字小游戏

1.随机数生成 要想实现猜数字小游戏&#xff0c;依赖于随机数的生成 1.1 rand()函数 这个函数是用来生成随机数的&#xff0c;返回值是正整数&#xff0c;他的值的范围是0到rand_max之间的&#xff0c;rand_max的值在大多数编译器上面是32767&#xff0c;rand()函数的使用必…...

iOS Failed to create provisioning profile.

错误描述 错误情况参考这张图 解决方案 修改Bundle Identifier就可以解决这个错误&#xff0c;找不到位置可以看图 &#xff08;具体解决的原理与证书有关&#xff0c;个人不是非常熟悉&#xff0c;还望大神告知&#xff09;...

122. Kafka问题与解决实践

文章目录 前言顺序问题1. 为什么要保证消息的顺序&#xff1f;2.如何保证消息顺序&#xff1f;3.出现意外4.解决过程 消息积压1. 消息体过大2. 路由规则不合理3. 批量操作引起的连锁反应4. 表过大 主键冲突数据库主从延迟重复消费多环境消费问题后记 前言 假如有家公司是做餐饮…...

Pytorch常用的函数(九)torch.gather()用法

Pytorch常用的函数(九)torch.gather()用法 torch.gather() 就是在指定维度上收集value。 torch.gather() 的必填也是最常用的参数有三个&#xff0c;下面引用官方解释&#xff1a; input (Tensor) – the source tensordim (int) – the axis along which to indexindex (Lo…...

用爬虫解决问题

使用Java进行网络爬虫开发是一种常见的做法&#xff0c;它可以帮助你从网站上自动抓取信息。Java语言因为其丰富的库支持&#xff08;如Jsoup、HtmlUnit、Selenium等&#xff09;和良好的跨平台性&#xff0c;成为实现爬虫的优选语言之一。下面我将简要介绍如何使用Java编写一个…...

机器学习-有监督学习

有监督学习是机器学习的一种主要范式&#xff0c;其基本思想是从有标签的训练数据中学习输入和输出之间的关系&#xff0c;然后利用学习到的模型对新的输入进行预测或分类。 有监督学习的过程如下&#xff1a; 1. 准备数据&#xff1a;首先&#xff0c;需要准备一组有标签的训练…...

【详细介绍下Visual Studio】

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

【Golang】实现 Excel 文件下载功能

在当今的网络应用开发中&#xff0c;提供数据导出功能是一项常见的需求。Excel 作为一种广泛使用的电子表格格式&#xff0c;通常是数据导出的首选格式之一。在本教程中&#xff0c;我们将学习如何使用 Go 语言和 Gin Web 框架来创建一个 Excel 文件&#xff0c;并允许用户通过…...

VSCode里玩转Qt Designer:手把手教你可视化设计PyQt5界面并自动生成Python代码

VSCode高效开发PyQt5&#xff1a;可视化设计与自动化代码生成实战 在Python GUI开发领域&#xff0c;PyQt5凭借其强大的功能和跨平台特性成为众多开发者的首选。然而&#xff0c;传统的手写界面布局代码不仅耗时耗力&#xff0c;还难以实时预览效果。本文将带你探索如何在VSCod…...

Rust Desk自建服务器全攻略:从零搭建比向日葵更快的远程桌面(附密钥配置避坑指南)

Rust Desk私有化部署实战&#xff1a;构建高性能远程桌面的完整指南 远程协作工具已成为现代办公的标配&#xff0c;但主流商业方案往往存在延迟高、隐私风险等问题。Rust Desk作为开源解决方案&#xff0c;不仅提供媲美商业软件的功能体验&#xff0c;更通过私有化部署实现完全…...

别再只盯着代码了!手把手教你读懂Cartographer的PGM和YAML地图文件(附Notepad++实操)

从二进制到坐标系&#xff1a;Cartographer地图文件深度解析与实战调参指南 当你第一次打开Cartographer生成的.pgm和.yaml文件时&#xff0c;是否感觉像在解读某种外星密码&#xff1f;那些数字和参数背后&#xff0c;藏着机器人如何理解世界的秘密。本文将带你像侦探一样拆解…...

Stable Yogi 模型 Java 开发实战:SpringBoot 微服务集成指南

Stable Yogi 模型 Java 开发实战&#xff1a;SpringBoot 微服务集成指南 最近在做一个智能客服项目&#xff0c;后端用的是 SpringBoot 微服务架构&#xff0c;需要集成一个图像理解模型来处理用户上传的截图。选型的时候&#xff0c;Stable Yogi 模型进入了我们的视野。它不仅…...

深入解析C++菱形继承:虚基表的内存布局与优化策略

1. 菱形继承的本质问题 我第一次遇到菱形继承问题时&#xff0c;正在开发一个教育管理系统。当时需要设计Assistant类继承Student和Teacher&#xff0c;结果发现这两个父类都有从Person继承的_age成员。这导致每个Assistant对象里存了两份_age——这就是典型的数据冗余问题。 …...

突破Windows 7系统限制:Python 3.9+版本的创新兼容方案

突破Windows 7系统限制&#xff1a;Python 3.9版本的创新兼容方案 【免费下载链接】PythonVista Python 3.9 installers that support Windows 7 SP1 and Windows Server 2008 R2 项目地址: https://gitcode.com/gh_mirrors/py/PythonVista 一、经典系统的现代Python支持…...

如何通过3阶段实现Windows无缝安装APK?革新性工具APK Installer全解析

如何通过3阶段实现Windows无缝安装APK&#xff1f;革新性工具APK Installer全解析 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows系统上运行Android应用一直…...

mapbox 基于 Turf.js 实现高精度多边形分割(支持带空洞 / 坐标无损)

在 GIS 前端开发中&#xff0c;多边形分割是高频需求&#xff08;如图斑拆分、地块划分&#xff09;。本文基于 Turf.js 封装了一套高精度多边形分割工具类&#xff0c;支持普通模式 / 兼容模式&#xff0c;可处理带空洞的多边形&#xff0c;且能 100% 保留原始坐标&#xff0c…...

如何高效解决Cursor试用限制?完整实用的解决方案指南

如何高效解决Cursor试用限制&#xff1f;完整实用的解决方案指南 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We h…...

Wan2.1-UMT5开发环境搭建:Node.js后端服务与前端交互配置

Wan2.1-UMT5开发环境搭建&#xff1a;Node.js后端服务与前端交互配置 如果你正在折腾Wan2.1-UMT5的WebUI&#xff0c;想自己搞点后端服务&#xff0c;或者想扩展它的功能&#xff0c;比如加个状态查询、做个回调通知&#xff0c;那你来对地方了。很多朋友卡在环境配置这一步&a…...