我同意 Jyutzio 的观点,因为您需要将 Navigation 组件移动到子路由上方,以便仅更改子路由的内容。
为了让导航栏更新登录/注销状态,您可能需要考虑实现 redux。我有一个项目的要求几乎和你的一样——一个静态的导航标题。
在我的标题中,我有import { connect } from 'react-redux';
在导出之前我使用的组件底部:
function mapStateToProps(state) {
return { authenticated: state.auth.authenticated };
}
Header = connect(mapStateToProps)(Header);
export default Header;
然后这使我可以检查“经过身份验证”的状态并相应地进行渲染。
renderLogoutButton() {
if(this.props.authenticated) {
return(
<li><a onClick={...}>Logout</a></li>
);
} else {
return(
<li><a onClick={...}>Login</a></li>
);
}
}
你需要设置一个 reducer,但是有很多资源可以解释 redux 设置。
我设置的路由器(简化)如下:
import Admin from './index';
...
<BrowserRouter>
<Switch>
<Route exact path="/login" component={Login} />
<Route path="/" component={Admin} />
</Switch>
</BrowserRouter>
指数:
import AdminRouter from './admin/admin_router';
...
<div>
<Menu />
<div>
<AdminRouter />
</div>
</div>
管理员路由器:
<div>
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/details" component={AdminDetails} />
<Route component={PageNotFound} />
</Switch>
</div>