【发布时间】:2016-10-28 13:05:57
【问题描述】:
我正在使用 react-router 的 react web 应用程序中实现 firebase 身份验证。
用户使用弹出式登录通过 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 监听器?
【问题讨论】:
标签: reactjs firebase react-router firebase-authentication