Reactjs 如何将useEffect firebase onAuthStateChanged函数转换为类?

Reactjs 如何将useEffect firebase onAuthStateChanged函数转换为类?,reactjs,typescript,firebase,firebase-authentication,Reactjs,Typescript,Firebase,Firebase Authentication,下面是我在函数组件中使用的代码 useEffect(() => { const unsubscribe = firebase.auth().onAuthStateChanged(user => { setIsLoggedIn(!!user); }); return () => { unsubscribe(); }; }); 下面是我对类组件的尝试 componentDidUpdate( prevProps:

下面是我在函数组件中使用的代码

useEffect(() => {
    const unsubscribe = firebase.auth().onAuthStateChanged(user => {
      setIsLoggedIn(!!user);
    });
    return () => {
      unsubscribe();
    };
  });
下面是我对类组件的尝试

componentDidUpdate(
    prevProps: LessonDrawerProps,
    prevState: LessonDrawerState
  ) {
    firebase.auth().onAuthStateChanged(user => {
          if (user) {
            this.setState({
              isLoggedIn: true,
            });
          }
        });
}
AuthStateChanged检测的类与函数组件中的类工作不正常。

如何做到这一点?

组件更新时会触发
组件diddupdate
,在您的情况下,这似乎永远不会发生(或者至少不会及时发生)。实际上,您希望在组件添加到小部件树后立即开始侦听身份验证状态更改


您需要将
onAutStateChanged
放在
componentDidMount
中,而不是
componentdiddupdate

我当前正在导航栏中使用该语句。在这种情况下,如果在
componentdidmount
中使用
onAutStateChanged
,导航栏始终不会更新状态。我的意思是,当用户登录的文本仍然是
login
而不是
logout
时,这是出乎意料的,但我无法解释为什么它会在没有复制的情况下出错。您可以编辑您的问题以显示更新的代码吗?我们需要看到重现问题的最小代码。如果您在jsbin或stackblitz等站点中重现问题,然后在问题中包含该代码(以及指向该代码的链接),通常会有所帮助。