gpt4 book ai didi

javascript - 如何修复、取消 useEffect 清理函数错误中的所有订阅和异步任务

转载 作者:行者123 更新时间:2023-12-02 18:28:42 24 4
gpt4 key购买 nike

警告:无法对已卸载的组件执行 React 状态更新。这是一个空操作,但它表明应用程序中存在内存泄漏。要修复此问题,请取消 useEffect 清理函数中的所有订阅和异步任务。

useEffect(() => {
const unsubscribe = streamCourses({
next: (querySnapshot) => {
const task = querySnapshot.docs.map((docSnapshot) =>
mapDocTask(docSnapshot)
);
setCourseDetails(task);
},
error: (error) => console.log(error),
});
return unsubscribe;
}, [setCourseDetails]);

最佳答案

我也遇到过类似的问题。我必须做两件事来解决这个问题:

(1) 我创建了一个State bool 值isMounted设置为 true默认情况下,用于包装我的 useEffect 的内容这样我的useEffect的内容仅当屏幕为 mounted 时才会运行.

(2) 我创建了一个 useEffect专门用于清理。这意味着useEffect除了 return 之外什么也没有其中设置了各种 State 的语句我必须使用默认值的变量。

示例:

useEffect(() => {
if (isMounted) {
const unsubscribe = streamCourses({
next: (querySnapshot) => {
const task = querySnapshot.docs.map((docSnapshot) =>
mapDocTask(docSnapshot)
);
setCourseDetails(task);
},
error: (error) => console.log(error),
});
return unsubscribe;
}
}, [setCourseDetails]);

useEffect(() => {
return () => {
setCourseDetails(null);
setIsMounted(false);
}
}, []);

关于javascript - 如何修复、取消 useEffect 清理函数错误中的所有订阅和异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69733784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com