reactjs - 如何防止用户退出时弹出登录对话框
问题描述
我有一个弹出对话框,显示用户单击登录时。这允许用户使用电子邮件/密码或谷歌登录。他们也可以从这里注册。
问题是,一旦他们登录,登录链接就会更改为注销。当您单击注销链接时,它会注销用户,但随后会再次显示登录对话框。据我所知,它不应该这样做。它检查是否有 currentUser,如果有,则启动注销过程,否则显示对话框。
当用户退出时,如何防止它显示对话框?
const Header = ({ currentUser, hidden, signOutStart }) => {
const [open, setOpen] = useState(false);
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
return (
<sc.HeaderContainer>
<sc.LogoContainer to={'/'}>
<Logo className={'logo'} />
</sc.LogoContainer>
<sc.OptionsContainer>
<sc.OptionLink to={'/shop'}>SHOP</sc.OptionLink>
<sc.OptionLink to={'/contact'}>CONTACT</sc.OptionLink>
{currentUser ? (
<sc.OptionLink as={'div'} to={'/#'} onClick={signOutStart}>
SIGN OUT
</sc.OptionLink>
) : (
<sc.OptionsContainer>
<sc.OptionLink onClick={handleClickOpen} to={'/#'}>SIGN IN</sc.OptionLink>
<SignInSignUpDialogue onClose={handleClose} open={open} />
</sc.OptionsContainer>
)}
<CartIcon />
</sc.OptionsContainer>
{hidden ? null : <CartDropdownContainer />}
</sc.HeaderContainer>
);
};
const mapStateToProps = createStructuredSelector({
currentUser: selectCurrentUser,
hidden: selectCartHidden,
});
const mapDispatchToProps = dispatch => ({
signOutStart: () => dispatch(signOutStart()),
});
export default connect(mapStateToProps, mapDispatchToProps)(Header);
解决方案
添加了signOut功能:
const signOut = () => {
signOutStart();
setOpen(false);
};
并改变:
<sc.OptionLink as={'div'} to={'/#'} onClick={signOutStart}>
至:
<sc.OptionLink as={'div'} to={'/#'} onClick={signOut}>
推荐阅读
- pandas - Pandas:自上次获胜以来每个 id 的事件数
- jquery - Safari 不喜欢 5em 以上的尺寸?
- javascript - 防止在加载页面上滚动
- ios - 如何将 UITableView 的顶部粘贴到 UISearchBar 的底部?
- testing - 如何让 LoadRunner 还测量远程 Windows Web 服务器的 CPU 和内存使用情况?
- laravel-5 - 优化数据库查询以避免内存问题
- php - 如何将数组拆分为具有平衡值集的多个数组
- c# - 绑定失去它的绑定
- python - 为什么在我调整散景中的滑块后,包含度量名称的 TableColumn 会消失?
- android - 我的问题是如何将 ID 从一项活动传递到另一项活动