嵌套反应路由器兄弟

Posted

技术标签:

【中文标题】嵌套反应路由器兄弟【英文标题】:nested react router sibling 【发布时间】:2019-08-10 09:40:44 【问题描述】:

我一直在阅读这篇文章: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 时得到了。如果我切换访问 RouteA 时得到的 OOP。

【问题讨论】:

【参考方案1】:

此 Repl 是一个可行的解决方案:https://codepen.io/anon/pen/ZPMBqY?editors=0010

有两个问题主要围绕理解 Switch 的想法展开。它从最大的特异性到最小的特异性。

问题 1) 让你的根路径最后,它是最不具体的

问题 2) 确保父母的确切是错误的

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

问题3)在Module内部使用switch

// 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>

【讨论】:

以上是关于嵌套反应路由器兄弟的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-router 和 IndexRoute 嵌套路由(反应路由器布局)

嵌套反应路由器组件不会在页面重新加载时加载/渲染?

反应嵌套路由无法正常工作

如何使反应路由器与静态资产、html5 模式、历史 API 和嵌套路由一起工作?

vue-router 嵌套路由没反应

在 react-router v4 的嵌套路由中看到空白页