【问题标题】:React Router v4 not rendering parent componentsReact Router v4 不渲染父组件
【发布时间】:2018-01-10 20:49:25
【问题描述】:

我的路线设置如下(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。

【问题讨论】:

    标签: javascript reactjs nested react-router react-router-dom


    【解决方案1】:

    你需要把 venues 路线放在 dashboard

    <Route exact path="/dashboard" component={RequiresAuth(AppContainer)}>
        <Route exact path="/venues" component={VenuesPage}/>
    </Route>
    

    编辑

    注意!正如 cmets(和其他答案)所说,这对 V4 不再有效。

    【讨论】:

    • 已经试过了。这样做会产生以下错误: 警告:您不应该在同一路由中使用 将被忽略。子路由在这里不起作用。
    • 对于 react-router v4 来说并不完全正确。但是它适用于 v3 或更早版本
    【解决方案2】:

    您可以使用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>
        );
      }
    

    【讨论】:

    • 当我点击路线 /dashboard/venues 时,这样做会将我带到一个空白页面。基本上找不到这条路线。我是 v4 的新手,所以在这里有点困惑。
    • 你确定你从 /dashboard route 中删除了确切的属性
    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多