javascript - 刷新页面后用户信息丢失(Firebase + React)
问题描述
我正在尝试创建一个导航栏。当用户未登录时,他们会看到一个导航栏,其中只有页面的标题。一旦用户登录,他应该会看到标题、其他页面、他的电子邮件地址和一个注销按钮。
我可以检索电子邮件地址,但是当我刷新页面并单击注销按钮时,我收到一条错误消息:
TypeError:无法读取 null 的属性“电子邮件”
我正在附上导航栏的代码以及如何在 app.js 中使用它,如下所示。
我不确定如何解决这个问题。
导航栏.js:
const NavigationBar = ({ authUser }) => (
<div>{authUser ? <NavigationBarAuth /> : <NavigationBarNonAuth />}</div>
);
const NavigationBarAuth =()=>{
return (
...
<Grid item xs={3}>
<div className ="nav-user">
<a className = "font user">{fire.auth().currentUser.email}</a>
</div>
</Grid>
);
应用程序.js:
constructor(props) {
super(props);
this.state = {
authUser: null,
// authUser: JSON.parse(localStorage.getItem('authUser')),
};
}
componentDidMount() {
this.listener = fire.auth().onAuthStateChanged(
authUser => {
authUser
? this.setState({ authUser })
: this.setState({ authUser: null });
},
);
}
componentWillUnmount() {
this.listener();
}
render() {
return (
...
<NavigationBar authUser={this.state.authUser} />
);
}
解决方案
调试后,我知道问题出在其他地方。我有一个 Signout 函数,并在按钮 onClick 中调用了该函数。我错误地调用了该函数,这就是为什么注销函数被触发并使用户无效的原因。感谢您的帮助和努力。
推荐阅读
- node.js - 尝试测试服务器连接时 Express Server 意外令牌
- java - 方法名称 execute 此语句不声明 OUT 参数。使用 { ?= call ... } 声明一个
- flutter - 我是否必须为一个字段同时创建 getter 和 setter?
- laravel - 通过回答安全问题手动重置密码 - Laravel
- mysql - mysql减去多个表不能正常工作
- azure-table-storage - 没有 sql db azure 表中的 sql 注入
- python - 在 django 中导入模块
- java - 通过 redmine-java-api 仅列出打开的 redmine 项目
- mongodb - 如何计算 docker 容器中的 WiredTiger 缓存大小?
- vue.js - 使用 vue.js 和 laravel 创建无限滚动时的无限循环