面试题:useEffect的Clean Up 什么时候触发?

在这里插入图片描述

useEffect作为做常用的Hook,以下三个知识点你有必要了解下~

防止写出奇怪的代码祸害队友,而我不幸就是这个受害者!!!!!

useEffect的依赖项为空

useEffect的dependencyList作为一个可选参数,当他的依赖项为空的时候,每次引起页面的渲染更新的时候,都会调用一次​该useEffect参数。

function App() {
  const [updateList, setUpdateList] = useState([])
  useEffect(() => {
    console.log("dependencyList 为null的useEffect被调用了")
  })
  return (
    <div className="App">
      <header className="App-header">
        <div>{updateList.map(time => { return <div>time:{time}</div> })}</div>
        <div onClick={() => { setUpdateList([...updateList, +new Date()]) }}>Add record</div>
      </header>
    </div>
  );
}

效果​如下:

在这里插入图片描述

在示例中,点击页面的Add Record 按钮共计四次,右侧中显示了共计2+4次的日志,这说明了每次页面的刷新时候,由于dependencyList为空,所以每次的副作用都可以被调用到。

useeffect的依赖项为空数组的时候

​在第一个示例中,我们可以猜想,每次的页面更新,useEffect作为副作用,都会被调用,但当dependencyList为空数组的时候,由于没有匹配到任何的dependency,所以会导致为每次的副作用都跟我们无关,​只有第一次初始化页面的时候才会匹配到。

同样的,下面一个简单的例子​。

function App() {
  const [updateList, setUpdateList] = useState([])
  useEffect(() => {
    console.log("dependencyList 为空数组的useEffect被调用了")
  }, [])
  return (
    <div className="App">
      <header className="App-header">
        <div>{updateList.map(time => { return <div>time:{time}</div> })}</div>
        <div onClick={() => { setUpdateList([...updateList, +new Date()]) }}>Add record</div>
      </header>
    </div>
  );
}

在这里插入图片描述

usseEffect返回​函数代表什么?

首先,讲这个内容并不是想要表达什么,只是因为很多人在写博客的时候,​内容太过于旧了,所以现在就更新一波,并不是说谁谁谁的问题。

打开CSDN,可以看到很多关于useEffect返回函数的描述
在这里插入图片描述

事实真的是这样嘛​?让我们​测试下。

function App() {
  const [updateList, setUpdateList] = useState([])
  useEffect(() => {
    return () => {
      console.log('useEffect的返回函数被调用')
    }
  }, [])
  return (
    <div className="App">
      <header className="App-header">
        <div>{updateList.map(time => { return <div>time:{time}</div> })}</div>
        <div onClick={() => { setUpdateList([...updateList, +new Date()]) }}>Add record</div>
        <a href='https://www.baidu.com'>跳转到百度</a>
      </header>
    </div>
  );
}

在这里插入图片描述

上述代码中,我们添加了一个a标签,作用是跳转到百度的网站,模拟出了组件被干掉的情况,这时候让我们在​打开”保留日志“开关,让我们看看是否会在日志中打印出来。​

此时,尚未点击按钮,useEffect的回调函数已经被调用了。
在这里插入图片描述

当我们点击按钮跳转过去的时候,useEffect的回调函数并没有被调用。
查看官网看看如何解释~

在这里插入图片描述

所以当我们要在useEffect的clean up逻辑运行的东西,你在useEffect中要有相对应的set ​up操作。

求关注~ 希望能帮到你~​

微信公众号文章

在这里插入图片描述

公众号文章链接,求关注

求关注~ 希望能帮到你~

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

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

相关文章

LLaMA-Factory推理实践

运行成功的记录 平台&#xff1a;带有GPU的服务器 运行的命令 git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory/ conda create -n py310 python3.10 conda activate py310由于服务器不能直接从huggingface上下载Qwen1.5-0.5B&#xff0c;但本地可…

轻松拿捏C语言——【文件操作】

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 目录 &#x1f…

Python高阶学习记录

文章导读 阅读本文需要一定的python基础&#xff0c;部分知识点是对python入门篇学习记录和python并发编程学习记录的深入探究&#xff0c;本文记录的Python知识点包括函数式编程&#xff0c;装饰器&#xff0c;生成器&#xff0c;迭代器&#xff0c;正则表达式&#xff0c;内存…

HTML蓝色爱心

目录 写在前面 HTML入门 完整代码 代码分析 运行结果 系列推荐 写在后面 写在前面 最近好冷吖&#xff0c;小编给大家准备了一个超级炫酷的爱心&#xff0c;一起来看看吧&#xff01; HTML入门 HTML全称为HyperText Markup Language&#xff0c;是一种标记语言&#…

最小时间差

首先可以想到&#xff0c;可以计算出任意两个时间之间的差值&#xff0c;然后比较出最小的&#xff0c;不过这种蛮力方法时间复杂度是O(n^2)。而先将时间列表排序&#xff0c;再计算相邻两个时间的差值&#xff0c;就只需要计算n个差值&#xff0c;而排序阶段时间复杂度通常为O…

Docker成功启动Rabbitmq却访问不了管理页面问题解决

目录 启动步骤&#xff1a; 无法访问问题总结&#xff1a; 启动步骤&#xff1a; 拉取镜像&#xff1a; docker pull rabbitmq 运行&#xff1a; docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq进入容器&#xff1a; docker exec -it 容器id /bin/…

C++ C (1152) : 循环赛日程表

文章目录 一、题目描述二、参考代码 一、题目描述 二、参考代码 #include<iostream> #include<vector> #include<cstdlib> using namespace std;void generateSchedule(vector< vector<int> >& table, int numPlayers, int rounds) {// 生…

模拟通讯录(详解通讯录排序qsort,strcmp)

前言&#xff1a; 学习了C语言结构体、联合体、枚举等&#xff0c;就可以写一个通讯录来强化自己对结构体的理解学习。顺便提升大家的基本功&#xff01;&#xff01; 通讯录菜单的打印&#xff1a; 关于菜单的打印在之前写游戏的时候写过多次&#xff0c;大家可以参照之前的改…

2024后端服务架构升级

文章目录 原因改造方案新架构图技术选型思考 服务拆分公共组件设计自部署算法服务排期计划 全球多活改造 原因 背景&#xff1a; 1、xx业务经过多轮的业务决策和调整&#xff0c;存在非常多技术包袱&#xff0c;带了不好的用户体验和极高的维护成本 2、多套机房部署&#xf…

大创项目推荐 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习

文章目录 0 简介1 课题背景&#x1f6a9; 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率&#xff08;Accuracy&#xff09;3.2 精确率(Precision)和召回率(Recall)3.3 平均精…

数据仓库核心:维度表设计的艺术与实践

文章目录 1. 引言1.1基本概念1.2 维度表定义 2. 设计方法2.1 选择或新建维度2.2 确定维度主维表2.3 确定相关维表2.14 确定维度属性 3. 维度的层次结构3.1 举个例子3.2 什么是数据钻取&#xff1f;3.3 常见的维度层次结构 4. 高级维度策略4.1 维度整合维度整合&#xff1a;构建…

c++程序员为什么要做自己的底层库

五一期间&#xff0c;在家里翻到之前上学时候用的电脑和工作日志&#xff0c;粗略浏览一番&#xff0c;感慨10年岁月蹉跎&#xff0c;仍然没有找到自己技术方向的“道”。遂有感而发&#xff0c;写下此文。 算起来&#xff0c;接触软件开发也有10年时间了&#xff0c;最开始是…

06C内存分配

C零碎语法 目录 文章目录 C零碎语法1.内存布局2. 内存对齐2.1结构体内存对齐2.1应用 1.内存布局 2. 内存对齐 2.1结构体内存对齐 三条原则&#xff1a; &#xff08;1&#xff09;结构体变量的 起始地址能够被其最宽的成员大小整除。 &#xff08;2&#xff09;结构体每个…

基于知识图谱分析贸易关系走向

基于知识图谱分析贸易关系走向 前言一、基础数据二、贸易规则三、知识图谱可视化四、完整代码 前言 知识图谱是一种用图模型来描述知识和建模世界万物之间的关联关系的技术方法。在贸易关系的分析中&#xff0c;知识图谱可以将各个国家、地区、商品、贸易政策等作为节点&#…

华为坤灵管理型交换机S300,S500,S310,S210,S220,S200 web端开局配置

一. 准备线缆 笔记本或没有COM口的电脑,需准备转接线,并安装好随线光盘的驱动,检查设备管理器中COM口是否正常 2.连接电脑与交换机的CONSOLE口 二&#xff0c;准备软件putty。 Download PuTTY: latest release (0.81) 配置步骤如下&#xff1a; 开启HTTP服务。设置https://1…

路由策略实验2

对R7&#xff0c;重发布直连路由 对R2&#xff0c;做双向 对R3同样 先不改优先级 查看&#xff0c;知道所有给R3的路由为151&#xff0c;全部为OSPF。 知道了是错误的&#xff0c;先把3&#xff0c;4之间的线路断掉 接着对R3&#xff0c;让优先级全部回到100&#xff08;displa…

STL中vector动态二维数组理解(杨辉三角)

题目链接&#xff1a;118.杨辉三角 题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 题目指要&#xff1a; 本题的主要目的是理解vector<vector<int&…

【Modelground】个人AI产品MVP迭代平台(1)——平台简介

文章目录 背景什么是Modelground&#xff1f;什么是Mediapipe&#xff1f;目标读者总结 背景 这个时代是AI的时代。相信你也能感觉到&#xff0c;最近几年&#xff0c;AI大模型层出不穷&#xff0c; 且迭代速度极快。无论你是哪个行业&#xff0c;都有必要严肃认真地考虑AI会给…

小公司的软件开发IT工具箱

目录 工具链困境 难题的解决 达到的效果 资源要求低 工具箱一览 1、代码管理工具 2、自动化发版&#xff08;测试&#xff09;工具 3、依赖库&#xff08;制品包&#xff09;管理 4、镜像管理 5、授权管理&#xff08;可选&#xff09; 待讨论&#xff1a;为什么不是…

模糊小波神经网络(MATLAB 2018)

模糊系统是一种基于知识或规则的控制系统&#xff0c;从属于智能控制&#xff0c;通过简化系统的复杂性&#xff0c;利用控制法来描述系统变量之间的关系&#xff0c;采用语言式的模糊变量来描述系统&#xff0c;不必对被控对象建立完整的数学模型。相比较传统控制策略&#xf…