组件销毁后异步队列执行setState导致的内存泄漏

<img src="https://pic.songma.com/blogimg/20250614/922af20a98454c64b4c1144bdf67ac9c.jpg" alt="组件销毁后异步队列执行setState导致的内存泄漏”>

在组件销毁的时候,任务队列里面还有在触发setState的操作,会出现可能内存泄漏的问题。列如常见场景:在B页面详情页发起请求获取数据修改state的值,但是还没等到数据取回来用户又执行了返回A页面的操作,但是请求还在继续,里面的代码还会执行。

<img src="https://pic.songma.com/blogimg/20250614/d768ab60c2824720979f5781ac5d560e.jpg" alt="组件销毁后异步队列执行setState导致的内存泄漏”>


真实场景(下图):

在一个详情页,点击一个暂未开放的功能会弹出一个Toast,3秒后会消失,但是还没等到消失就返回上一页了,详情页的组件已经销毁了,但是详情页的setState过3秒后还会执行,然后就弹出上面的警告。

<img src="https://pic.songma.com/blogimg/20250614/cec913f834a045a4b42ad32af65dcdc1.jpg" alt="组件销毁后异步队列执行setState导致的内存泄漏”>

解决办法:

出现的缘由是由于组件已经卸载了,可是异步的请求或者异步的操作还在执行。可以在组件销毁前把异步的操作撤销。反正有好几种解决方法。

<img src="https://pic.songma.com/blogimg/20250614/d2707017a55049309f052fb97afd94f3.jpg" alt="组件销毁后异步队列执行setState导致的内存泄漏”>

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容