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 官网

解决内存泄漏

相关推荐
momo_养身版5 分钟前
Browser use — 利用 AI 操作浏览器 · 原理篇
前端·openai
悲且狂9 分钟前
Vue环境搭建:vue+idea
前端·vue.js·intellij-idea
Allen Bright11 分钟前
【XML基础-1】深入理解XML:介绍、语法规则与实际应用
xml·前端
大个个个个个儿21 分钟前
vue3腾讯云直播 前端拉流(前端页面展示直播)
前端·javascript·腾讯云
momo_养身版24 分钟前
Browser use — 利用 AI 操作浏览器 · 实践篇
前端·ai编程
看晴天了33 分钟前
关于web应用开发赛道的备考
前端·node.js·ecmascript 6
LoveCan34 分钟前
ant-design-vue自动计算a-table每一列的宽度的实现
前端·vue.js
张天宇34 分钟前
微信小程序custom-tab-bar
前端
喝西瓜汁的兔叽Yan35 分钟前
【常用功能】下载文件和复制到剪切板
前端·javascript
少卿35 分钟前
深入理解 useContext:从原理到实现
前端·react.js