我正在使用 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 侦听器?