我需要你的想法。
renderIt = () => {
if(!this.state.user){
return <Login />
}else {
return <Home />
}
}
我在这里检查用户是否已登录,如果未登录,则显示<Login />
;当他自己登录时,则显示<Home />
。
问题是,当我注销并刷新时,即使没有登录也能看到<Home/>
页面不到一秒钟。
componentDidMount = () => {
this.authListener();
}
authListener = () => {
firebase
.auth()
.onAuthStateChanged((user) => user ? this.setState({user}) : this.setState({user: null}))
}
答案 0 :(得分:1)
这是因为!this.state.user
最初为true,直到firebase auth完成工作之前,它都会向您显示<Home/>
。
解决方案是首先使用加载(某些微调器动画)组件,直到Firebase身份验证完成
if(this.state.user===null){
//create Loading component first before using it here
return <Loading />
}else if(!this.state.user){
return <Login />
}else {
return <Home />
}
答案 1 :(得分:1)
问题出在您的初始状态,即:
class App extends Component {
state = {
user: {}
}
...
由于您随后在渲染代码中检查了this.state.user
,因此最终比较了!{}
(false
)。
我强烈建议您遵循以下规则,使代码尽可能简单:
this.state.user
代表当前用户对象。this.state.user
是null
。在代码中:
class App extends Component {
state = {
user: null
}
componentDidMount = () => {
this.authListener();
}
authListener = () => {
firebase
.auth()
.onAuthStateChanged((user) => this.setState({user}));
}
...
另请参见更新后的工作代码:https://stackblitz.com/edit/react-1bv4bb?file=src/App.js