嵌套的反应路由器兄弟

时间:2019-03-19 18:52:42

标签: javascript reactjs react-router-v4

我一直在阅读这篇文章:Multiple Nested Routes in react-router-dom v4,有些人喜欢它,但我的案子无法解决。

这里有2个REPL尝试使用本文中描述的每种方法-也许我错过了什么?

如果您可以使用这两个REPL之一,则可能已设置好-但是我更喜欢模块化方法。谢谢您的帮助。

模块化成路线 https://codepen.io/anon/pen/XGPKwZ?editors=0010

<Router>
  <div className="container">
   <ul>
     <li><Link to="/">Home</Link></li>
     <li><Link to="/about/">About</Link></li>
   </ul>
<hr />

      <Route exact path="/" component={Home} />
      <Route exact path="/about" component={About} /> 
    </div>
 </Router>

const Home = ({children, match}) => (
  <div>
    <h1>Home</h1>
    <p>This is the Home Page</p> 
    <li><Link to="/page2">page2</Link></li>
    <li><Link to="/page3">page3</Link></li>
    <hr />

    <Route path={match.path} component={Page1} />
    <Route path={`${match.path}/page2`} component={Page2} />
    <Route path={`${match.path}/page3`} component={Page3} />
  </div>
)

const About = ({children, match}) =>(
  <div>
    <h1>About</h1>
    <p>This is about</p>
    <li><Link to="/about/page5">page5</Link></li>
    <li><Link to="/about/page6">page6</Link></li>
    <hr />

    <Route path='/about/' component={Page4} />
    <Route exact path='/about/page5' component={Page5} />
    <Route exact path='/about/page6' component={Page6} />
  </div>
)

路线周围的容器 https://codepen.io/anon/pen/zbJqXK?editors=0011

 <div className="container">
  <Router>
    <Switch>
        <ul>
          <li><Link to="/">Home</Link></li>
          <li><Link to="/about/">About</Link></li>
        </ul>
      <Home>
        <Route component={({ match }) =>
          <div>
            <Route exact path='/' component={Page1} />
            <Route path='/page2' component={Page2} />
            <Route path='/page3' component={Page3} />
          </div>
        }/>
      </Home>
      <About>
        <Route component={({ match }) =>
          <div>
            <Route path='/about/' component={Page4} />
            <Route path='/about/page5' component={Page5} />
            <Route path='/about/page6' component={Page6} />
          </div>
        }/>
      </About>
    </Switch>
  </Router>
  </div>

我有很多带有子页面的页面实例。我可以使用一个嵌套的布局来工作,但是当我尝试在Switch下添加作为同级项时,当我尝试访问RouteC时就会得到。如果我切换OOP,则在访问RouteA时会得到提示。

1 个答案:

答案 0 :(得分:1)

此Repl是有效的解决方案:https://codepen.io/anon/pen/ZPMBqY?editors=0010

有2个问题主要围绕了解Switch的思想。它从最大的特异性到最小的特异性。

问题1)让您的根路径最后一遍,最不明确的

问题2)确保对父母的要求完全正确

<Switch>
  <Route  path="/about" component={About} /> 
  <Route  path="/" component={Home} />
</Switch>

问题3)使用模块内部的开关

// Home
<Switch>
  <Route exact path='/' component={Page1} />
  <Route exact path='/page2' component={Page2} />
  <Route exact path='/page3' component={Page3} />
</Switch>

// About
<Switch>
  <Route path='/about/page5' component={Page5} />
  <Route path='/about/page6' component={Page6} />
  <Route path='/about/' component={Page4} />
</Switch>