完整警告消息:警告:无法在已卸载的组件上执行React状态更新。这是空操作,但它表明应用程序中发生内存泄漏。要修复,请取消使用useEffect清理功能中的所有订阅和异步任务。
此警告未始终显示,而是在需要时显示。该应用刚刚启动的最长时间。
export default class something extends React.Component {
_isMounted = false;
state = {
};
componentDidMount() {
this._isMounted = true;
firebase = new Fire((error, user) => {
if (error) {
return alert('something something something something');
}
firebase.getLists((lists) => {
this.setState({ lists, user }, () => {
this.setState({ loading: false });
});
});
this.setState({ user });
});
}
componentWillUnmount() {
this._isMounted = true;
firebase.detach();
}
这位于另一个包含所有firebase代码的文件中
detach() {
this.unsubscribe();
}
我猜这与分离firebase.detach
有关答案 0 :(得分:0)
您的代码中需要一些小的更新才能使其正常工作。
在更新任何状态变量之前,您需要检查_isMounted
是否为true
。
您还希望在_isMounted=false
中设置componentWillUnmount()
,而不是_isMounted=true
。
请参见下面的更新代码:
export default class something extends React.Component {
_isMounted = false;
state = {
};
componentDidMount() {
this._isMounted = true;
firebase = new Fire((error, user) => {
if (error) {
return alert('something something something something');
}
firebase.getLists((lists) => {
if (this._isMounted){
this.setState({ lists, user }, () => {
this.setState({ loading: false });
});
}
});
if (this._isMounted){
this.setState({ user });
}
});
}
componentWillUnmount() {
this._isMounted = false;
firebase.detach();
}