我正在使用 react-router 在 react web 应用程序中实现 firebase auth。
用户使用弹出式登录通过 Facebook 或 Google 登录(在 /signin),然后如果成功,我将路由到主应用程序 (/)。在主应用程序组件中,我侦听身份验证状态更改:
componentWillMount() {
this.authListener = this.authListener.bind(this);
this.authListener();
}
authListener 侦听 auth 更改:
authListener() {
firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log('user changed..', user);
this.setState({
User: {
displayName: user.displayName
}
});
} else {
// No user is signed in.
browserHistory.push('/signin');
}
});
}
一切正常,除非我退出(并返回 /signin)并使用 facebook 或 google 再次登录。然后我收到一条错误消息:
警告:setState(...):只能更新已安装或正在安装的组件。
我怀疑来自现在卸载的先前登录状态应用程序的 onAuthStateChanged 侦听器仍在运行。
有没有办法在 App 组件卸载时删除 onAuthStateChanged 侦听器?