如何避免本机反应中的内存泄漏?
Posted
技术标签:
【中文标题】如何避免本机反应中的内存泄漏?【英文标题】:How to avoid memory leak in react native? 【发布时间】:2022-01-13 04:14:38 【问题描述】:我正在尝试处理本机反应中的内存泄漏。 我已经学习了很多教程,但无济于事。
这是我的原始代码
useEffect(() =>
const unsubscribe = navigation.addListener('focus', () =>
setLoading(true);
async function fetchData()
try
await dispatch(fetchProductComment(itemNum, ''));
await dispatch(fetchMultiBuy(itemNum, 'SIZES'));
...
catch (err)
console.log(err);
finally
setLoading(false);
fetchData();
);
return unsubscribe;
, [navigation]);
查看教程后,我尝试了Boolean Flag
方法和Abort Controller
方法以避免内存泄漏。但这些都不起作用。
***ABORT CONTROLLER METHOD***
useEffect(() =>
let abortController = new AbortController();
const unsubscribe = navigation.addListener('focus', () =>
setLoading(true);
async function fetchData()
...
fetchData();
);
return () =>
abortController.abort;
unsubscribe;
;
, [navigation]);
***BOOLEAN METHOD***
useEffect(() =>
let componentMounted = true;
const unsubscribe = navigation.addListener('focus', () =>
setLoading(true);
async function fetchData()
...
fetchData();
);
return () =>
componentMounted = false;
unsubscribe;
;
, [navigation]);
这些不起作用。有什么想法吗?
【问题讨论】:
【参考方案1】:我也有同样的问题。如果它仍然显示内存泄漏,请你试试这个并评论。
我正在跟进这个问题。
useEffect(() =>
const controller = new AbortController();
const signal = controller.signal;
(async () =>
const response = await fetch(API_KEY, signal);
const news = await response.json();
setNews(news.articles); // fetched JSON
)();
return () => controller.abort();
,[API_KEY])
【讨论】:
以上是关于如何避免本机反应中的内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章