【问题标题】: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]);

这些不起作用。有什么想法吗?

【问题讨论】:

    标签: reactjs react-native asynchronous


    【解决方案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])
    

    【讨论】:

      猜你喜欢
      • 2023-02-14
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多