为什么我需要在Firebase中退订`onAuthStateChanged`

时间:2019-12-07 06:16:08

标签: reactjs firebase firebase-authentication

因此,我正在遵循有关创建google登录的教程。他说您需要使用onAuthStateChanged来监听登录/注销。我无法理解的部分是当他说该方法类似于“开放订阅”,我们需要“关闭订阅”以防止内存泄漏。

所以在您看代码之前,我无法理解的是:

  1. 为什么我们需要定义unsubscribeFromAuth;
  2. 为什么我们需要在ComponentDidMount中将onAuthStateChanged分配给this.unsubscribeFromAuth
  3. 为什么我们需要使用ComponentWillUnmount并调用unsubscribeFromAuth
class App extends React.Component {
  constructor() {
    super()

    this.state = {
      currentUser: null
    }
  }

  unsubscribeFromAuth = null

  componentDidMount() {
    this.unsubscribeFromAuth = auth.onAuthStateChanged(user => {
      this.setState({ currentUser: user })
      console.log(user)
    })
  }

  componentWillUnmount() {
    this.unsubscribeFromAuth()
  }

1 个答案:

答案 0 :(得分:0)

您取消订阅以避免内存泄漏。

初始化auth.onAuthStateChanged()时,您将创建一个侦听器。如果您不取消订阅,那么即使您停止使用它,该监听器也将继续监听。这将浪费内存。

为防止这种情况发生,请在卸载应用程序时取消订阅侦听器。

要取消订阅,您需要取消订阅。这就是为什么您将侦听器分配给ComponentDidMount中的变量的原因。这使您可以在想要取消订阅时引用变量。

我希望这可以将您的3个问题纳入背景。

这里有两个讲座可以更详细地讨论该主题。