详解 useEffect return 内外的代码执行顺序

参考代码

import React, { useEffect, useState } from 'react'
import { Link } from 'react-router-dom'

function Demo() {
  const [count, setCount] = useState(0)

  useEffect(() => {
    console.log('无依赖---------------------------', count)
    return () => {
      console.log('执行  无依赖  时的return的函数')
    }
  })
  useEffect(() => {
    console.log('依赖为[]------------------------', count)
    return () => {
      console.log('执行 依赖为[]  时的return的函数')
    }
  }, [])
  useEffect(() => {
    console.log('依赖为[count]------------------------', count)
    return () => {
      console.log('执行 依赖为[count]  时的return的函数')
    }
  }, [count])
  return (
    <div>
      <p>count的值为: {count} </p>
      <button onClick={() => setCount(count + 1)}>add</button>

      <Link to="/management">About</Link>
    </div>
  )
}

初次加载页面结果如下

可以看到首次组件加载时,return 都没有执行

修改依赖项之后

 

修改依赖项会先执行无依赖和依赖的 return,再执行 return 之外的,没有执行依赖项为空数组的情况。

跳转路由之后

可以看到路由跳转时,三种情况的 return 都执行了 

总结

  1. 首次加载不会执行 return
  2. 当 useEffect 被再次执行时会先清理副作用执行 return,再执行 return 之外的,可以理解为只要 useEffect 被再次执行,都会执行 return
  3. 当组件销毁时,不管是否有依赖项,useEffect 的 return 都会被执行去清理副作用

代码参考:useEffect有依赖项和没有依赖项时return内外的代码执行顺序_useeffect return-CSDN博客

react版本: "^18.2.0"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/416635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat安装及环境配置

一、检查是否安装jdk 可以win R 输入cmd在命令行中输入java -version 查看jdk的版本&#xff0c;如果没有安装可在官网下载后安装&#xff0c;我们老师直接发给我们了安装包&#xff0c;点击就可以安装了。如果已经安装&#xff0c;可以跳过安装步骤。 安装过程 一直点击下一…

MySQL8.0+jdk17启动seata报错处理

报错 问题1 问题2 处理完问题1&#xff0c;启动后发现MySQL连接报错。 原因 问题1 由于本地是jdk17版本过高&#xff0c;这里使用seata-server-1.5.1&#xff0c;版本冲突。 问题2 由于本地使用MySQL8.0以上&#xff0c;Nacos中的配置不是com.mysql.cj.jdbc.Driver 解决…

FreeRTOS 10移植STM32F10X系列教程,文末附源码。

1、文件准备 去FreeRTOS官网下载源码&#xff0c;尽量下载最新版本&#xff0c;里面有demo工程&#xff0c;解压完成后只保留FreeRTOS文件夹即可。 source文件即为FreeRTOS源码 新建一个文件夹source&#xff0c;将当前目录的.c文件移动到source文件夹里。 portable文件夹里只保…

面试数据库篇(mysql)- 11主从同步

原理 MySQL主从复制的核心就是二进制日志 二进制日志&#xff08;BINLOG&#xff09;记录了所有的 DDL&#xff08;数据定义语言&#xff09;语句和 DML&#xff08;数据操纵语言&#xff09;语句&#xff0c;但不包括数据查询&#xff08;SELECT、SHOW&#xff09;语句。 复…

el-table 指定表格合并行与单元格,以及表头合并单元格

1&#xff1a;页面html <template><div class"container"><div class"flex-end"><el-button type"primary" click"allEndBtn">批量办结</el-button><el-button type"primary" click"…

抖音视频关键词批量下载软件|视频采集批量下载工具

视频批量下载工具操作说明 我们自主研发了一款视频批量下载工具&#xff0c;旨在解决市面上视频无水印工具只能通过单个视频链接进行提取的不便之处。QQ:290615413我们的工具不仅支持通过单个视频链接提取&#xff0c;更可以通过关键词进行视频搜索&#xff0c;实现批量和有选择…

深入浅出JVM(十八)之并发垃圾收集器G1

在这篇文章 深入浅出JVM&#xff08;十六&#xff09;之三色标记法与并发可达性分析 中&#xff0c;我们曾说明过GC线程和用户线程并发执行导致的对象消失问题&#xff0c;可以使用增量更新或原始快照的方式来解决 上文深入浅出JVM&#xff08;十七&#xff09;之并发垃圾收集…

Mysql REGEXP正则运算符

# 邮箱h开头 mysql> select email form xxx where email REGEXP ^h;

C语言之操作符详解

文章目录 一、算术操作符二、移位操作符1、 原码、反码、补码2、左移操作符3、右移操作符 三、位操作符1、按位与【&】2、按位或【|】3、按位异或【^】4、按位取反【~】5、两道面试题6、进制定位将变量a的第n位置为1将变量a的第n位置为0 四、赋值操作符1、复合赋值符 五、单…

记录工作中遇见问题、学习项

1、判空操作 Demo demo Optional .ofNullable(demoService.getById(id)) .orElseThrow(() -> new ServiceException("不存在id为" id "的数据")); 2、SQL方面 1、group by : GROUP BY 子句必须放在 WHERE 子句中的条件之后&#…

【MATLAB】 小波分解信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 小波分解算法 小波分解算法是一种数学方法&#xff0c;用于将信号分解为不同频率的小波成分。这种算法基于小波函数&#xff0c;可以用于信号处理、图像压缩和数据压缩等领域。小波分解算法的基本思想是…

Python多线程编程:深入理解threading模块及代码实战【第99篇—Multiprocessing模块】

Python多线程编程&#xff1a;深入理解threading模块及代码实战 在Python编程中&#xff0c;多线程是一种常用的并发编程方式&#xff0c;它可以有效地提高程序的执行效率&#xff0c;特别是在处理I/O密集型任务时。Python提供了threading模块&#xff0c;使得多线程编程变得相…

设置django orm 模型中的字段限制数值的大小

需求如下&#xff1a; 1&#xff1a;使用了django框架中的orm模式来创建数据表 2&#xff1a;限制字段的取值范围 # -------------------- # 因为django的orm没有限制整形字段的取值范围&#xff0c;所以需要django内置的值校验器进行校验 from django.core.validators i…

刷题第2天(中等题):LeetCode59--螺旋矩阵--考察模拟能力(边界条件处理)

LeetCode59: 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff1a…

Appium手机Android自动化

目录 介绍 什么是APPium&#xff1f; APPium的特点 环境准备 adb(android调试桥)常用命令 appium图形化简单使用 连接手机模拟器 使用appium桌面端应用程序 ​编辑 整合java代码测试 环境准备 引入所需依赖 书写代码简单启动 ​编辑 Appium元素定位 id定位 介…

docker版本 jenkins配置gitlab自动部署

前端项目 Build steps pwd npm config set registry https://registry.npm.taobao.org npm -v node -v #npm install npm run build:prod tar -czvf QASystem.tar.gz distpwd cd /data/zhouxy37/vue_deploy tar -zxvf QASystem.tar.gz sudo mv dist QASystem cp -r QASyste…

Matlab: Introduction to Hybrid Beamforming

文章目录 来源混合波束赋形的基本概念System Setup关键函数 来源 在matlab的命令行输入 doc hybrid beamforming 混合波束赋形的基本概念 混合波束形成简介 本例介绍了混合波束形成的基本概念&#xff0c;并说明了如何模拟这种系统。 现代无线通信系统使用空间复用来提高散…

WiFi模块赋能智能手表:拓展功能与提升连接性

随着科技的不断进步&#xff0c;智能手表正逐渐成为现代人生活中不可或缺的智能配饰。其中&#xff0c;WiFi模块的应用为智能手表带来了更多强大的功能和更高的连接性&#xff0c;为用户提供了更为便捷、智能化的使用体验。本文将深入探讨WiFi模块在智能手表中的应用。 远程通信…

Linux入门攻坚——16、Linux系统启动流程

CentOS5、6的启动流程 Linux&#xff1a;kernel rootfs&#xff0c;Linux系统就是内核加上根文件系统。 内核之上是库&#xff1a; 库&#xff1a;函数集合&#xff0c;function&#xff0c;函数具有调用接口&#xff0c;库函数不能单独执行&#xff0c;必须被其他程序调用…

管理系统提升:如何从用户体验设计上发力

一、关于用户体验 管理系统的用户体验&#xff08;User Experience, UX&#xff09;是指用户在使用管理系统时所感受到的整体体验&#xff0c;包括用户对系统界面、交互、功能、性能等方面的感受和评价。一个好的管理系统的用户体验应该是简单易用、高效快捷、信息清晰、界面美…