react useEffect 内存泄漏

javascript 复制代码
componentWillUnmount() {
    this.setState = (state, callback) => {
      return;
    };
    // 清除reaction
    this.reaction();
  }

useEffect

使用AbortController

javascript 复制代码
useEffect(() => {  
    let abortController = new AbortController();  
    // your async action is here  
    return () => {  
    abortController.abort();  
    }  
    }, []);


useRef

javascript 复制代码
    const isMounted = useRef(true);
    
    useEffect(()=>{
    if (isMounted.current) {
      init(); //执行方法
    }
    return () => {isMounted.current = false;};
     }, []);

setTimeout

javascript 复制代码
 useEffect(() => {
    const interval = setTimeout(() => {
    
    }, 10);
    return () => {
      clearTimeout(interval);
    };
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

建议了解相关知识:定时器,事件循环。

设置定时器1000ms后,定时器里的函数会被加入到宏任务队列里,并执行。此时,设置的只执行一次的定时器已经生效过了,清除定时器没有意义。

timer的值为定时器的序号,只有手动赋值为null,才会变为null。

清除定时器要在定时器触发前调用才有意义

DOM 官网

解决内存泄漏

相关推荐
升鲜宝供应链及收银系统源代码服务6 小时前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
i建模6 小时前
将Edge浏览器的标签页从顶部水平排列**移至左侧垂直侧边栏
前端·edge
跟着珅聪学java6 小时前
js编写中文转unicode 教程
前端·javascript·数据库
英俊潇洒美少年6 小时前
Vue3 深入响应式系统
前端·javascript·vue.js
英俊潇洒美少年8 小时前
React 最核心 3 大底层原理:Fiber + Diff + 事件系统
前端·react.js·前端框架
我命由我123458 小时前
React Router 6 - 概述、基础路由、重定向、NavLink、路由表
前端·javascript·react.js·前端框架·ecmascript·html5·js
LJianK18 小时前
java封装
java·前端·数据库
yaaakaaang8 小时前
(四)前端,如此简单!---Promise
前端·javascript
GISer_Jing8 小时前
ReAct规划原理实战指南
前端·react.js·ai·aigc
SoaringHeart8 小时前
Flutter组件封装:翻转组件 NFlipCard
前端·flutter