使用Switch实现路由器v4嵌套路由

Oki*_*nal 9 javascript reactjs react-router

尝试执行以下操作,但它无法正常工作.

ReactDOM.render(
  <Router>
    <div className="route-wrapper">
      <Switch>
        <App>
          <Route exact path="/" component={HomePage} />
          <Route path="/user" component={UserPage} />
        </App>
        <Route component={Err404} />
      </Switch>
    </div>
  </Router>,
  document.getElementById('main')
)
Run Code Online (Sandbox Code Playgroud)

正如文档所述,在Switch元素中只允许使用Route和Redirect元素.如果没有在App中明确地包装HomePage和UserPage或者App包含错误页面,我如何才能使用它?

小智 17

虽然我已经开始开发一个"Universal React app",其中第一页加载是通过服务器端渲染完成的,但我遇到了类似的问题,因为React-Router刚刚更新到4.0.你应该考虑重组你的应用程序,如下所示:

ReactDOM.render(
  <Router>
    <div className="route-wrapper">
      <Switch>
        <Route path="/" component={App} />
        <Route component={Err404} />
      </Switch>
    </div>
  </Router>,
  document.getElementById('main')
)
Run Code Online (Sandbox Code Playgroud)

App组件的重构如下:

class App extends React.Component {
  render() {
    return <div>
      <Switch>
        <Route exact path="/" component={HomePage} />
        <Route exact path="/user" component={UserPage} />
      </Switch>
    </div>;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 关于这个例子:甚至可以到达Err404组件?第一个Route匹配所有内容并加载App组件,在这种情况下会加载Err404组件吗?它不会检测后续交换机中是否找不到匹配项,是吗? (6认同)