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等站点中重现问题,然后在问题中包含该代码(以及指向该代码的链接),通常会有所帮助。