嗨,我正在尝试编写一个导航栏组件。
导航栏中有两个地方供用户登录。在CCD_ 1组件本身&另一个名为CCD_ 2的组件也处理登录。设置菜单是整个项目中使用的可重复使用的组件,因此我们在中添加了一个登录按钮
我面临的问题是当用户从设置菜单登录时。我想更新导航栏的状态。
最初,当应用程序中没有用户时,Navbar会获得LOGIN
按钮。我想要的是,当用户通过设置菜单登录时,我想重新设置导航栏&将LOGIN
按钮更改为LOGOUT
按钮,但这并没有发生。
这是导航条组件
<Button
onClick={(event: React.MouseEvent<HTMLElement>) =>
setDisplayDialog(true)
}
className={classes.loginButton}
>
{firebase.auth().currentUser ? <p>Logout</p> : <p>Login</p>}
</Button>
由于我使用firebase谷歌登录方法,我正在测试用户是否可以使用此语法
firebase.auth().currentUser
这是设置菜单组件代码
const signInWithGoogle = async (event: React.MouseEvent): Promise<void> => {
const creds = await firebase
.auth()
.signInWithPopup(AuthenticationProviders.google);
await firebase.auth().updateCurrentUser(creds.user);
hideDialogBox(event);
};
<GoogleButton
className={authStyle.GoogleButtonPlacement}
onClick={(event: React.MouseEvent) => {
signInWithGoogle(event);
}}
/>
那么,我如何跟踪设置菜单中的状态变化呢?
您应该注册一个auth状态观测器,而不是使用currentUser
来跟踪状态更改,如文档所示:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// User is signed out.
}
});
这为您提供了一个回调,使您能够响应用户登录状态随时间的变化。您可以使用此回调调用setState()
来更改用户登录或注销时需要更新的任何组件。