我正在使用Effect Hook从服务器获取数据,并将这些数据传递给React表格,我在那里使用了相同的API调用来加载下一组数据。
当应用程序加载时,我收到以下警告:
Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
Effect Hook:
useEffect(() => {
setPageLoading(true);
props
.dispatch(fetchCourses())
.then(() => {
setPageLoading(false);
})
.catch((error: string) => {
toast.error(error);
setPageLoading(false);
});
}, []);
React表格页面:
<ReactTable
className="-striped -highlight"
columns={columns}
data={coursesData}
defaultPage={currentPage}
defaultPageSize={courses.perPage}
loading={isLoading}
manual={true}
onFetchData={setFilter}
/>
设置过滤器功能:
const setFilter = (pagination: any) => {
props.dispatch(updateCoursePageSize(pagination.pageSize));
props.dispatch(updateCourseCurrentPage(pagination.page + 1));
setCurrentPage(pagination.page);
setPerPage(pagination.pageSize);
setLoading(true);
props.dispatch(fetchCourses()).then(() => {
setLoading(false);
});
};
有人知道如何清理React中的hook吗?
useEffect()
中使用let unmounted = false
可以工作?每次运行useEffect()
时,它都会将unmounted
重置为false
,因此清除函数没有任何效果? - ShuzhenguseEffect
的依赖数组为空,因此它只会运行一次。即使它运行多次,它仍然有用,只是名称不准确(因为它未必已经卸载)。每次 effect 运行时都会创建一个全新的本地变量unmounted
。新变量可能是false
,但旧变量是true
。来自上一个 effect 的代码关闭了旧变量,因此旧代码可以检查它以确定它是过时 effect 的一部分并且什么也不做。 - Nicholas Tower