Javascript 未安装组件的状态更新。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务
我正在尝试在FlatList中使用ListEmptyComponent 如果我没有数据,我想显示ListEmptyComponent={} 但是,在LoadingSecond组件中,我使用useEffect在加载为true时进行渲染,并且在2秒后没有数据,即加载为false时尝试渲染。。但如果我使用此代码,则会发生此错误Javascript 未安装组件的状态更新。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务,javascript,node.js,reactjs,react-native,Javascript,Node.js,Reactjs,React Native,我正在尝试在FlatList中使用ListEmptyComponent 如果我没有数据,我想显示ListEmptyComponent={} 但是,在LoadingSecond组件中,我使用useEffect在加载为true时进行渲染,并且在2秒后没有数据,即加载为false时尝试渲染。。但如果我使用此代码,则会发生此错误 state update on an unmounted component. This is a no-op, but it indicates a memory le
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.
我明白原因是什么。但我不知道我该如何修复
这是我的密码
(todoList.js)
返回(
字符串(item.id)}
initialNumToRender={50}
ListMPtyComponent={}
renderItem={({item})=>(
)}
/>
);
(Loadingsecond.js)
const loadingsecond=()=>{
const[loading,setLoading]=useState(false);
useffect(()=>{
设置加载(真);
设置超时(()=>{
设置加载(假);
},2000);
},[]);
返回(
装货(
)
:(
没有数据
)
);
};
如何解决此错误?您应该在清除功能中清除计时器。由于某种原因,该组件在超时过期之前正在卸载,因此您正在尝试设置已卸载组件的状态。调用从
useffect
挂钩返回清理函数,以清理当前渲染周期中的任何效果。当与带有空依赖项的useffect
挂钩一起使用时,它与componentWillUnmount
同义,换句话说,它在组件卸载之前运行
useEffect(() => {
setLoading(true);
const timerId = setTimeout(() => {
setLoading(false);
}, 2000);
return () => clearTimeout(timerId);
}, []);
非常感谢。我明白了!!!!!!
const Loadingsecoend = () => {
const [loading, setLoading] = useState(false);
useEffect(() => {
setLoading(true);
setTimeout(() => {
setLoading(false);
},2000);
},[]);
return (
loading ? (
<Container>
<ActivityIndicator color="#D3D3D3" size="large" />
</Container>
)
:(<Container>
<Label>no data</Label>
</Container>)
);
};
useEffect(() => {
setLoading(true);
const timerId = setTimeout(() => {
setLoading(false);
}, 2000);
return () => clearTimeout(timerId);
}, []);