Warning:useEffect函数中取消所有订阅和异步任务

React 组件销毁时清除订阅、定时器以及清理异步操作和取消请求等资源 问题: Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function. in GlobalHeaderRight (a 阅读详情

Warning:Can’t perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.useEffect清理函数中取消所有订阅和异步任务

报错:

image-20211122195849735

react-dom.development.js:88 Warning: 
Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
    in ReportMng
    in Unknown (created by Context.Consumer)

翻译一下:

无法对已卸载的组件执行React状态更新。这是一个no-op,但它表明应用程序中存在内存泄漏。若要修复,请在useEffect清理函数中取消所有订阅和异步任务。

看下源码中报错的位置:

image-20211122200022573

image-20211122194144874

原因:

组件卸载了,但是仍处于渲染数据状态(如:setState,useState),一般写定时器时候会有出现。其他情况也会,只要组件卸载但仍在更新数据时机

解决如下:

这个错误不大会影响实际使用,解决非常简单。

先讲下hook函数组件的解决:

第一种定时器情况:

const [update, setUpdate] = useState(1);
 useEffect(() => {
    const creatInt = setInterval(() => {    //假设这里写了定时器来更新update
      setUpdate(c => c + 1);
    }, 2000);
return () => {
      clearInterval(creatInt);   //(重点)这里清除掉定时器  
    };
  }, []);

第二种useSate情况:

  useEffect(() => {
    let isUnmount = false;      //这里插入isUnmount
    const fetchDetail = async () => {
      const res = await getDetail(detailId);
      if (res.code === 0 && !isUnmount) {  //加上判断isUnmount才去更新数据渲染组件
        setDetail(res.data);
      }
    };
    fetchDetail();
    return () => isUnmount = true;   //最好return一个isUnmount
  }, [detail]);

改成这个后warning消失

image-20211122200022573

// const mountedRef = useRef(true); // useEffect清理函数中取消所有订阅和异步任务
  let isUnmount = false; //这里插入isUnmount
  useEffect(() => {
    // if (!permission?.writeAuth) {
    //   window.location.href = `/admin/forbidden?url=${encodeURI(window.location.href)}`;
    // }
    getCityList();

    return () => isUnmount = true; //最好return一个isUnmount
    // mountedRef.current = false;
  }, []);
  // 获取城市列表
  const getCityList = useCallback(async (params: GetAuthCityListResponse) => {
    const res = await getAuthCityList(params);
    if (res?.code === 0 && !isUnmount) {
      // if (!mountedRef.current) return null;
      setCityIdOptions(res?.data);
      console.log('11111', !isNotCreate);
      if (!isNotCreate) {
        getAppealDetails();
      }
    }
  }, []);
  // 查询详情
  const getAppealDetails = useCallback(async () => {}, []);

说明:

useEffect相当于class组件的3个生命周期,其中return ()=>{ } 相当于 componentWillUnMount

class类组件:原理同hook在 componentWillUnMount 中设置一个 值true 、false来判断是否渲染组件

https://stackoverflow.com/questions/54954385/react-useeffect-causing-cant-perform-a-react-state-update-on-an-unmounted-comp

感谢阅读

❤️关注+点赞+收藏+评论+转发❤️**,原创不易,鼓励笔者创作更好的文章

关注公众号小圆脸儿,一个专注于web前端基础、工程化、面试的前端公众号

React面试核心知识点全解析:从虚拟DOM到Hooks原理与性能优化 现代前端开发中,组件化与声明式UI已成为主流范式,而虚拟DOM作为React高效更新的核心机制,通过Diff算法计算最小变更集,在提升渲染性能的同时实现了跨平台抽象。Hooks的引入则彻底改变了逻辑复用方式,其闭包特性与依赖数组的机制,成为理解数据流与副作用的关键。无论是状态管理选型(如Redux与Zustand),还是组件通信方案的权衡,都离不开对渲染机制与性能优化的深刻认知。掌握这些底层原理,不仅有助于应对复杂工程挑战,也是前端面试中衡量候选人实战能力的重要标尺。从虚拟DOM的Fiber架构到Hooks 阅读详情

相关推荐

React Devtools 原理与实战:透视 React 运行时的调试利器

React Devtools 是理解 React 运行时机制的核心工具,其本质是通过浏览器扩展架构,深度集成 React 内部协调器(Reconciler)与 Fiber 树,实现实时组件状态、Hook 调用链与渲染生命周期的可视化。它不依赖 Chrome DevTools Protocol,而是利用 `__REACT_DEVTOOLS_GLOBAL_HOOK__` 私有钩子,在 `commit` 阶段前捕获精准变更数据,支撑 `react diff算法原理` 的实证分析与 `react面试题` 中高频考点

weixin_30271335的博客 359

react路由无法跳转(To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function)

//问题:每次提交表单成功后跳转路由都回马上返回登陆页(手机必定出现,pc不出现) //react提示error:Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEff

weixin_43295106的博客 2507

React Context API 原理深度解析:不是状态管理,而是渲染引擎级通信机制

Context API 是 React 16.3 引入的跨层级数据传递基础设施,其本质并非状态管理工具,而是基于 Fiber 架构构建的上下文绑定机制。它通过特殊的 fiber tag(ContextProvider)、依赖链表(contextDependencies)和位掩码(changedBits)实现细粒度更新调度,使 context 消费具备 O(1) 读取性能与可中断渲染能力。相比 Redux 等应用层状态库,Context 的技术价值在于零开销的环境配置分发(如 theme、locale、aut

dechen6073的博客 408

react-native ‘内存泄漏’警告 Can‘t perform a React state update on an unmounted component. 。。。

Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.

weixin_45742358的博客 1239

React核心概念与组件化开发实践指南

组件化开发是现代前端框架的核心思想,通过将UI拆分为独立可复用的组件单元,显著提升了代码的可维护性和开发效率。React作为主流前端框架,采用虚拟DOM和单向数据流机制实现高效渲染,其创新的JSX语法将HTML标记与JavaScript逻辑有机结合。在工程实践中,React Hooks解决了状态管理难题,useState和useEffect等API使函数组件具备完整能力。结合Redux等状态管理工具,开发者能够构建复杂的企业级应用。从电商网站到后台管理系统,React的组件化特性使其成为构建交互式用户界面的

weixin_30781433的博客 361

Cursor、Windsurf、Copilot 三款AI编程工具深度对比与选型指南

AI编程助手已从代码补全工具演进为具备上下文理解、跨文件重构和领域专用解析能力的智能开发伙伴。其核心原理在于对代码语义、项目结构及技术生态的深度建模,技术价值体现在显著降低认知负荷、加速模块级重构、提升多语言混合开发效率。典型应用场景覆盖单人MVP快速验证、小型团队协同开发、嵌入式与PCB等垂直领域任务,以及强合规要求的企业级项目。本文基于30天17个真实项目实操,聚焦Cursor的Agent Mode重构能力、Windsurf的VS Code深度集成与文件级智能体特性、GitHub Copilot的社区共

cigang4063的博客 421

【报错】Can’t perform a React state update on an unmounted component. This is a no-op, but it indica

react报错:Can’t perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.

owo_ovo的博客 4432

【taro react hooks 错误解决】---- Warning: Can‘t perform a React state update on an unmounted component.

无法对已卸载的组件执行react状态更新。

止于至善 874

ReactHook - useEffect、useLayoutEffect

一. useEffect 作用: 推迟代码执行 渲染完成之后再执行,常用于 数据读取 完成移除 定时器、监听 第二个参数来模拟生命周期。 useEffect存在一种bail out(保释)机制: 当你尝试设置相同的状态,不会渲染,也不会触发effect 设置了相同state: “补救”——仅仅让你把函数执行完,不会真的渲染、也不会执行effect 又设置了相同state——没有 setState state设置重复的值——只会重复渲染一次 +1 例如: useEffect——cl

EmotionComputer 1530

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO 在之前的工作中有接触过LOAM,最近在工作中又接触到Faster LIO相关的工作,于是想着对Fast LIO / Fast LIO2 / Faster LIO这一系列工作进行一个简单的总结,以加深自己对激光SLAM算法的理解,之前总结过的一些和激光SLAM算法相关的博客还有,感兴趣的同学可以一起学习讨论: 激光SLAM总结——VLOAM / LIMO算法解析 激光SLAM总结——LIO-Mapping / LIOM /

weixin_44580210的博客 1万+

channel || channelGroup || ctx.writeAndFlush()发送字符串消息客户端接收不到的原因

一、原因 网络上传播的数据都是字节(二进制数据)类型。我们如果直接向网络流里面写入一个对象(如:String对象),是无法传输的。只有将对象序列化(转换为可以传输的字节类型)之后,才可以进行传输。所以问题的根源就很清楚了,需要把字符串转换成字节进行传输。、 二、解决办法 1、手动序列化 服务端: channelGroup.writeAndFlush(Unpooled.copiedBuffer("【客户端】"+remoteAddress+"已下线"+format.format(new Date()), Cha

haohaoxuexiyai的博客 4060

React hook 报错Warning...cancel all subscriptions and asynchronous tasks in a useEffect cleanup fn

场景: 有两个组件,组件A和组件B。组件B新建保存后,跳转到组件A,同时需要再请求组件A中的数据。 我是这么写的,在点击 保存 按钮 时,跳转组件A,下一行是请求接口 参考文献:https://blog.csdn.net/u011607490/article/details/88953692 ...

yingzizizizizizzz的专栏 2487

zemax光线光扇图

通过入瞳某一坐标(PX,PY)的光线在像面上有唯一的位置(EX,EY),以EX,EY为纵坐标,以PX,PY为横坐标,分别建立坐标系,把通过入瞳的光线都在坐标系里描点就得到了光扇图。对于视场内任意一点,取其子午面内的光线,以光线在光阑面上的透射点坐标为横坐标,同时以该光线在像面上的坐标为纵坐标,描出所有点,构成的图形即为子午面光扇图。在焦点位置,曲线的斜率为0,也就是说,不管入射时的横坐标(光阑面上的位置)是多少,离轴多远,都将汇聚在焦点处。此时,子午面和弧矢面有不同的分布,两条曲线不重合。

fendoudecheng的博客 8099

Warning: Can‘t perform a React state update on an unmounted component.

网络请求回来之后使用setState,如果组件被销毁的话就会报这个错误。pro-antd 开发模式下,login 页面登陆之后报错。异常信息:组件销毁了,但是react还在set state。

qubes的专栏 543

CubeMX配置ADC+DMA避坑实战:如何避免采样过快导致的系统崩溃

本文针对STM32开发中常见的ADC采样过快导致程序卡死问题,提供了基于CubeMX的实战避坑指南。通过分析ADC与DMA协作机制,详解时钟配置、采样时间、DMA缓冲区长度及中断设置等关键步骤,帮助开发者从源头规避系统崩溃风险,实现稳定可靠的数据采集。

weixin_28273593的博客 324

C语言专升本编程题

湖南省专升本选拔考试,C语言程序设计内部习题

weixin_45729947的博客 2117

react.js函数组件解决内存泄漏警告

为大家分享一个警告信息 devScripts.js:5836 Warning: Can’t perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup functi

GguanWei的博客 746

Windows版MySQL8.4.2LTS解压直用(下载免安装-绿色-项目打包直接使用-含卸载)

安装前运行微软常用运行库全集(也可能称为依赖)关于MySQL8中相关参数配置,可通过。选择8.5.2LTS长期服务版。选中密码,右键会直接复制。

xzzteach的博客 1440

Jules:面向工程落地的异步Repo-Aware编程AI搭档

在AI编程工具泛滥的今天,'代码补全'和'对话式编程'已成基础能力,真正决定生产力跃迁的是能否实现端到端、可审计、可协作的自动化任务闭环。这背后涉及三大核心技术支柱:异步执行机制(解耦人机时间节奏)、Repo-Aware代码理解(构建依赖/测试/UI/基础设施多维拓扑图),以及Plan & Self-Critique双脑决策范式(用代码库自身约束替代主观判断)。Jules正是这一范式的首个工业级实践——它不替代开发者写代码,而是将重复性调试、验证、PR交付等‘夜间值守型任务’压缩至15分钟内完成,让人类专注

weixin_30565199的博客 364

西门子PLC实战:基于1200/1500的工业物联网MQTT通讯全解析

本文详细解析了如何在西门子S7-1200/1500系列PLC上实现工业物联网MQTT通讯。通过从硬件准备、网络配置到TIA Portal中MQTT_Client功能块的实战编程,手把手指导工程师打通车间数据桥梁,解决信息孤岛问题,实现PLC数据高效上云或设备间互联。

whisky的博客 1091

模拟量输入功能块 S_ITR(Easy系列PLC完整ST源代码)

IN Input INT 输入数字量 1IN ISH INT 输入数字量上限 2IN ISL INT 输入数字量下限 3IN OSH REAL 输出工程量上限 4IN OSL REAL 输出工程量下限 5OUT OUTPUT REAL 输出工程量 6VAR temp1 REAL 临时变量1 7VAR temp2 REAL 临时变量2 8。

RXXW_Dor的博客 716

基于Orval与OpenAPI规范构建类型安全的WebSocket客户端实践

在现代Web开发中,实时通信技术是实现聊天推送、数据看板、协同编辑等场景的核心。WebSocket协议作为实现全双工、低延迟通信的关键技术,其原理在于建立持久连接,允许服务端主动推送数据,突破了传统HTTP请求-响应模式的限制。为了提升开发效率与代码质量,API客户端代码生成已成为前端工程化的重要实践,它能根据API规范自动生成类型安全的客户端代码,减少手动编写和维护的重复劳动。将这一理念应用于WebSocket领域,通过扩展OpenAPI规范或采用AsyncAPI等DSL来定义实时API的契约,结合Orv

weixin_34023982的博客 426

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring Boot与React实现用户收藏功能:从数据库设计到前后端状态同步

在内容型应用中,用户与内容的互动功能,如“喜欢”或“收藏”,是构建个性化体验和推荐系统的基石。其核心原理在于通过数据库的“多对多关系”模型,建立用户与内容实体之间的关联记录。从技术价值看,这不仅实现了用户行为的持久化,更是后续进行数据分析、内容排序和个性化推荐的数据来源。在工程实践中,确保此类功能的健壮性,关键在于解决前端状态与后端数据的实时同步,以及后端接口的幂等性设计,以防止因网络延迟或用户重复操作导致的数据不一致。本文以音乐播放器的歌曲收藏为具体应用场景,详细阐述了如何利用Spring Boot、Re

weixin_34195142的博客 438

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

在 useEffect 中提示内存泄漏警告问题

我正在尝试根据条件更新一段 UI。条件由单独组件中的数据库调用设置。它有时有效,但通常无效。

xunmaw001的博客 552

react报错:Can‘t perform a React state update on an unmounted component.

问题描述: 项目中,在网络请求没有返回之前就跳转到另外的页面,结果发现控制台报错Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect clean

ncgNCGg的博客 9963

react报错:Warning: Can't perform a React state update on an unmounted component. This is a no-op, but

Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in ...

MFWSCQ的博客 1万+
上一篇: js获取时间常见用法整理
下一篇: 浏览器存储HTTP中的URL长度限制、cookie、sessionStorage和localStorage的区别和使用
LittleRoundFace
博客等级 码龄7年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值