javascript - 导航栏无法显示
问题描述
在我的项目中登录后,导航栏必须更改。
class App extends React.Component {
render(){
return(
<BrowserRouter>
<div className="App">
{firebase.auth().onAuthStateChanged(user =>{
if(user){
return(
<UserNavBar/>
)
}else{
return(
<CommonNavBar/>
)
}
})}
<Route path="/Home" component={Home}/>
<Route path="/Photos" component={Photos}/>
<Route path="/RegisterPage" component={RegisterPage}/>
<Route path="/LoginPage" component={LoginPage}/>
<Route path="/Account" component={Account}/>
</div>
</BrowserRouter>
)
}
}
export default App
但是什么都没有返回,我尝试调试了很多次:
- 系统检测到用户正在登录
- 如果我在它是否有效之后进行控制台日志
解决方案
我认为问题在于您误解了异步代码(Promises)和模板渲染概念。你不能只从 Promise 中返回一些组件并期望它出现在结果中。这是您可以用于启动的一种不同的方法:
import React, { useState, useEffect } from 'react';
const NavBar = ({ user, isLoading }) => {
const [isLoading, setIsLoading] = useState(true);
const [user, setUser] = useState(null);
useEffect(() => {
firebase.auth().onAuthStateChanged(user =>{
setUser(user);
setIsLoading(false);
});
}, []);
if (isLoading) {
return <div>Some navigation placeholder without content while info is loading....</div>
}
return user ? <UserNavBar/> : <CommonNavBar/>;
}
const App = () => {
return(
<div className="App">
<NavBar />
<BrowserRouter>
<Route path="/Home" component={Home}/>
<Route path="/Photos" component={Photos}/>
<Route path="/RegisterPage" component={RegisterPage}/>
<Route path="/LoginPage" component={LoginPage}/>
<Route path="/Account" component={Account}/>
</BrowserRouter>
</div>
)
};
export default App
这里重要的事情:
- 在
onAuthStateChanged
我们不返回某些组件,但我们使用用户信息设置状态数据。user
设置状态会重新渲染组件,并且取决于手头上现有的数据,组件会渲染结果。 - 在加载数据时,最好显示一些占位符(空导航)以避免过多的故障
- 我们将导航数据和渲染逻辑提取到单独的组件中 - 不会用非常具体的代码污染常见的 App 组件。
- 由于 Hooks API 现在在 React 社区中更加“花哨和流行”,代码看起来有点不同。
如有问题,请随时添加评论,我很乐意提供帮助。
推荐阅读
- google-apps-script - 在 gmail 邮件正文上方显示信息消息
- c++ - Opencv/2DTG,clone() 函数的问题
- javascript - 如何将使用日期范围选择器获得的值转换为两个单独的日期和时间?
- javascript - 购物车中的物品未附加在我的表单中
- r - 沿折线生成一定距离的点
- angular - Ionic PWA SSR,如何在服务器上构建和设置?
- spring-batch - 如何在春季批量编写器中将数据简化为 sftp
- javascript - 使用 flex-box 定位
- angular - 如何隐藏按钮?
- http - 从 http 源连接器转换 json 结果