我有一个具有登录功能的 Meteor + React 应用程序。主导航栏根据用户的登录状态显示不同的项目。
我的问题是,当用户登录时,它不会像预期的那样自动更新导航栏。它仅在重新加载页面或更改路线后显示。
这显然违背了使用 React 的伟大之处。
这就是我所拥有的:
应用容器
export class AppContainer extends Component {
constructor(props) {
super(props)
this.state = this.getMeteorData()
}
getMeteorData() {
return { isAuthenticated: Meteor.userId() !== null}
}
render() {
return(
<div className="hold-transition skin-green sidebar-mini">
<div className="wrapper">
<Header isAuthenticated={this.state.isAuthenticated} />
<MainSideBar />
{this.props.content}
<Footer />
<ControlSideBar />
<div className="control-sidebar-bg"></div>
</div>
</div>
)
}
}
标题
export class Header extends Component {
render() {
return (
<header className="main-header">
...
<nav className="navbar navbar-static-top" role="navigation">
<a href="#" className="sidebar-toggle" data-toggle="offcanvas" role="button">
<span className="sr-only">Toggle navigation</span>
</a>
<CustomNav isAuthenticated={this.props.isAuthenticated} />
</nav>
</header>
)
}
}
自定义导航
export class CustomNav extends Component {
render() {
if(this.props.isAuthenticated) {
navigation = <NavLoggedIn />
} else {
navigation = <NavLoggedOut />
}
return (
<div className="navbar-custom-menu">
{navigation}
</div>
)
}
}
我认为这就是帮助解决此问题所需的所有相关代码,但请告诉我是否应该做其他事情。不确定是否像我这样通过组件向下传递道具是正确的做法,所以如果我也搞砸了,请给我一个提示。
非常感谢您的帮助!