Reactjs 反应路由器v4路由差异

Reactjs 反应路由器v4路由差异,reactjs,react-router,react-router-dom,Reactjs,React Router,React Router Dom,我正在为我的react应用程序创建路由,有人能解释一下这两种方法的区别吗。 从用户的角度来看,它们的工作原理是一样的,在性能、最佳实践方面有什么不同 第一个是多个路由,为同一路径呈现不同组件: <Route path='/:shop/booking' component={Services}/> <Route path='/:shop/booking' component={Calendar}/> 第二种是单路径渲染组件作为道具。子对象(?): 相当于: &l

我正在为我的react应用程序创建路由,有人能解释一下这两种方法的区别吗。 从用户的角度来看,它们的工作原理是一样的,在性能、最佳实践方面有什么不同

第一个是多个路由,为同一路径呈现不同组件:

<Route path='/:shop/booking' component={Services}/>
<Route path='/:shop/booking' component={Calendar}/>

第二种是单路径渲染组件作为道具。子对象(?):



相当于:

<Route path='/' children={Component}/>


据此:

有时需要渲染路径是否与位置匹配 不在这些情况下,可以使用函数children prop。它起作用了 与render完全相同,只是无论是否存在 匹配与否。子渲染道具接收所有相同的路由 道具作为组件和渲染方法,路由失败时除外 若要匹配URL,则match为null。这允许您动态地 根据路由是否匹配调整UI

因此,通过给路由提供子属性而不是组件,即使当前URL不匹配,也可以强制它呈现。我可能弄错了,但似乎向管线添加组件道具会覆盖其子道具

因此,您不能期望这两段代码具有相同的行为:

<Route path='/:shop/booking' component={Services}/>
<Route path='/:shop/booking' component={Calendar}/>

显示指定路径的两个组件

<Route path='/:shop/booking'>            
    <Aux>
        <Services/>
        <Calendar/>
    </Aux>
</Route>

显示两个组件包装在另一个组件中,用于任何路径

最后,我想说React中的最佳实践是将两个组件包装成一个组件,并将其添加到路由的组件属性中,而不是创建具有完全相同路径的两个路由

如果由于一个组件必须显示在多条管线上而无法包装两个组件,则可以使用类似以下的方法:

  <BrowserRouter>
    <div> 
      <Header />
      <Switch>
       <Route path='/' component={Home}/>
       <Route path='/foo' component={Foo}/>
       <Route path='/foo2' component={Foo2}/>
      </Switch>
      <Footer />
    </div>
  </BrowserRouter>

<Route path='/:shop/booking'>            
    <Aux>
        <Services/>
        <Calendar/>
    </Aux>
</Route>
  <BrowserRouter>
    <div> 
      <Header />
      <Switch>
       <Route path='/' component={Home}/>
       <Route path='/foo' component={Foo}/>
       <Route path='/foo2' component={Foo2}/>
      </Switch>
      <Footer />
    </div>
  </BrowserRouter>