React Router v4 Разница в маршрутах

Я создаю маршрутизацию для своего приложения для реагирования, может ли кто-нибудь объяснить мне разницу между этими двумя подходами. С точки зрения пользователя они работают одинаково, в чем разница в производительности, лучшие практики?

Первый - это несколько маршрутов, отображающих разные компоненты для одного и того же пути:

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

Во-вторых, компоненты рендеринга с одним путем как props.children (?):

<Route path='/:shop/booking'>            
    <Aux>
        <Services/>
        <Calendar/>
    </Aux>
</Route>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
<Route path='/'>            
    <Component>
</Route>

Эквивалентно :

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

Согласно этому: https://reacttraining.com/react-router/core/api/Route/children-func:

Sometimes you need to render whether the path matches the location or not. In these cases, you can use the function children prop. It works exactly like render except that it gets called whether there is a match or not.The children render prop receives all the same route props as the component and render methods, except when a route fails to match the URL, then match is null. This allows you to dynamically adjust your UI based on whether or not the route matches.

Таким образом, давая дочернюю опору вместо компонента для вашего маршрута, вы заставляете его отображать, даже если текущий 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>

Другие вопросы по теме