React Router 中嵌套路由中的默认组件

Jam*_*een 6 javascript jsx reactjs react-router

在 React Router 中我有一个嵌套路由

<Route path='about' component={{main: About, header: Header}}>
  <Route path='team' component={Team} />
</Route>
Run Code Online (Sandbox Code Playgroud)

所以现在当我去 时它会显示团队/about/team

但是如何设置访问时显示哪个组件呢/about

我努力了

<Route path='about' component={{main: About, header: Header}}>
  <IndexRoute component={AboutIndex} />
  <Route path='team' component={Team} />
</Route>
Run Code Online (Sandbox Code Playgroud)

<Route path='about' component={{main: About, header: Header}}>
  <Route path='/' component={AboutIndex} />
  <Route path='team' component={Team} />
</Route>
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

我的“关于”组件如下所示

class About extends React.Component {
  render () {
    return (
      <div>
        <div className='row'>
          <div className='col-md-9'>
            {this.props.children}
          </div>
          <div className='col-md-3'>
            <ul className='nav nav-pills nav-stacked'>
              <li className='nav-item'><IndexLink className='nav-link' to='/about' activeClassName='active'>About</IndexLink></li>
              <li className='nav-item'><Link className='nav-link' to='/about/team'>Team</Link></li>
            </ul>
          </div>
        </div>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

Ish*_*nka 6

反应路由器 v6

该路由有一个属性index,用于根据文档定义索引路由

<Route index element={<DefaultPage />} />
Run Code Online (Sandbox Code Playgroud)


Cra*_*123 5

REACT 路由器 4 更新

默认路由是没有路径的路由。

import BrowserRouter from 'react-router-dom/BrowserRouter';
import Switch from 'react-router-dom/Switch';
import Route from 'react-router-dom/Route';

<BrowserRouter>
  <Switch>
    <Route exact path='/about' component={AboutIndex} />
    <Route component={AboutIndex} /> // <--- don't add a path for a default route
  </Switch>
</BrowserRouter>
Run Code Online (Sandbox Code Playgroud)

如果您的组件中不需要此对象{main: About, header: Header},则只需将 AboutIndex 放入组件属性中即可。那应该有效

<Router history={browserHistory}>
  <Route path='about' component={AboutIndex}>
    <IndexRoute component={AboutIndex} />
    <Route path='team' component={Team} />
  </Route>
</Router>
Run Code Online (Sandbox Code Playgroud)

如果您仍然需要主组件和标头组件,只需根据您的需要将它们添加为父组件、子组件或同级组件


man*_*oid 5

我发现的另一种方法是使用带有属性的react-router-dom包的Navigate组件index。用户导航到该support路线后,将默认进入about以下示例中的页面。

<Route path="support/*" element={<Support />}>
    <Route index element={<Navigate to="about" replace />} />
    <Route path="about" element={<About />} />
    <Route path="contact" element={<Contact/>} />
</Route>
Run Code Online (Sandbox Code Playgroud)