我正在反应网络应用程序中使用react-router实现firebase auth.
用户使用弹出窗口登录(在/登录)Facebook或Google,然后如果成功,我将路由到主应用程序(/).在主应用程序组件中,我监听身份验证状态更改:
componentWillMount() {
this.authListener = this.authListener.bind(this);
this.authListener();
}
Run Code Online (Sandbox Code Playgroud)
authListener侦听身份验证更改:
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');
}
});
}
Run Code Online (Sandbox Code Playgroud)
一切正常,除非我退出(并返回/登录)并使用Facebook或谷歌再次登录.然后我收到一个错误说:
警告:setState(...):只能更新已安装或安装的组件.
我怀疑现在卸载的先前登录状态应用程序中的onAuthStateChanged侦听器仍在运行.
有没有办法在App组件卸载时删除onAuthStateChanged侦听器?