React Router v4 不渲染父组件
React Router v4 not rendering parent components
我的路线设置如下 (index.js):
<BrowserRouter history={browserHistory}>
<Switch>
<Route exact path="/" component={RootContainer} />
<Route exact path="/login" component={RedirectToApp(LoginPage)} />
<Route exact path="/dashboard" component={RequiresAuth(AppContainer)} />
<Route exact path="/dashboard/venues" component={VenuesPage} />
</Switch>
</BrowserRouter>
在我的 AppContainer 中,我的组件写成:
render() {
return (
<div className='wrapper main-app-wrapper'>
<Header toggleSidebar={this.toggleSidebar}>
<AuthHeaderActions />
</Header>
<div className='content-wrapper'>
{this.props.children}
</div>
<LeftMenu />
<Footer />
</div>
);
}
当我转到路线 /dashboard 时,页眉、页脚和左侧菜单会正确呈现。
但是当我点击路线 /dashboard/venues 时,只会呈现 VenuesPage 中存在的内容。页眉、页脚和左侧菜单未呈现。路由嵌套有问题。我正在使用 react-router-dom - v4.
您需要将 venues 路线放入 dashboard
<Route exact path="/dashboard" component={RequiresAuth(AppContainer)}>
<Route exact path="/venues" component={VenuesPage}/>
</Route>
编辑
注意!正如评论(和其他答案)所述,这对 V4 不再有效。
您可以使用 react-router v4
在您的组件中添加 Routes
您可以将路线更改为
index.js
<BrowserRouter history={browserHistory}>
<Switch>
<Route exact path="/" component={RootContainer} />
<Route exact path="/login" component={RedirectToApp(LoginPage)} />
<Route path="/dashboard" component={RequiresAuth(AppContainer)} />
</Switch>
</BrowserRouter>
现在您希望 VenuesPage
成为 AppContainer
的子代。您可以将其添加到 AppContainer
组件中,例如
render() {
return (
<div className='wrapper main-app-wrapper'>
<Header toggleSidebar={this.toggleSidebar}>
<AuthHeaderActions />
</Header>
<div className='content-wrapper'>
{this.props.children}
<Route exact path="/dashboard/venues" component={VenuesPage} />
</div>
<LeftMenu />
<Footer />
</div>
);
}
我的路线设置如下 (index.js):
<BrowserRouter history={browserHistory}>
<Switch>
<Route exact path="/" component={RootContainer} />
<Route exact path="/login" component={RedirectToApp(LoginPage)} />
<Route exact path="/dashboard" component={RequiresAuth(AppContainer)} />
<Route exact path="/dashboard/venues" component={VenuesPage} />
</Switch>
</BrowserRouter>
在我的 AppContainer 中,我的组件写成:
render() {
return (
<div className='wrapper main-app-wrapper'>
<Header toggleSidebar={this.toggleSidebar}>
<AuthHeaderActions />
</Header>
<div className='content-wrapper'>
{this.props.children}
</div>
<LeftMenu />
<Footer />
</div>
);
}
当我转到路线 /dashboard 时,页眉、页脚和左侧菜单会正确呈现。
但是当我点击路线 /dashboard/venues 时,只会呈现 VenuesPage 中存在的内容。页眉、页脚和左侧菜单未呈现。路由嵌套有问题。我正在使用 react-router-dom - v4.
您需要将 venues 路线放入 dashboard
<Route exact path="/dashboard" component={RequiresAuth(AppContainer)}>
<Route exact path="/venues" component={VenuesPage}/>
</Route>
编辑
注意!正如评论(和其他答案)所述,这对 V4 不再有效。
您可以使用 react-router v4
Routes
您可以将路线更改为
index.js
<BrowserRouter history={browserHistory}>
<Switch>
<Route exact path="/" component={RootContainer} />
<Route exact path="/login" component={RedirectToApp(LoginPage)} />
<Route path="/dashboard" component={RequiresAuth(AppContainer)} />
</Switch>
</BrowserRouter>
现在您希望 VenuesPage
成为 AppContainer
的子代。您可以将其添加到 AppContainer
组件中,例如
render() {
return (
<div className='wrapper main-app-wrapper'>
<Header toggleSidebar={this.toggleSidebar}>
<AuthHeaderActions />
</Header>
<div className='content-wrapper'>
{this.props.children}
<Route exact path="/dashboard/venues" component={VenuesPage} />
</div>
<LeftMenu />
<Footer />
</div>
);
}