Реакция: разница между <route exact path=//"> а также <route path=//">

Кто-то может объяснить разницу между

 <Route exact path="/" component={Home} />

а также

 <Route path="/" component={Home} />

Я не знаю значения "точного"

Ответы

Ответ 1

В этом примере ничего нет. exact параметр вступает в игру, когда у вас есть несколько путей, имеющих похожие имена:

Например, представьте, что у нас есть компонент " Users который отображает список пользователей. У нас также есть компонент CreateUser который используется для создания пользователей. URL-адрес CreateUsers должен быть вложен в " Users. Поэтому наша установка может выглядеть примерно так:

<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />

Теперь проблема здесь, когда мы переходим на http://app.com/users маршрутизатор будет проходить через все наши определенные маршруты и вернуть найденное им ПЕРВОЕ совпадение. Таким образом, в этом случае он сначала найдет маршрут " Users а затем вернет его. Все хорошо.

Но если мы перейдем к http://app.com/users/create, он снова пройдет через все наши определенные маршруты и вернет найденное им ПЕРВОЕ совпадение. React router выполняет частичное совпадение, так что /users частично соответствуют /users/create, поэтому он неправильно вернет маршрут Users снова!

exact параметр отключает частичное согласование маршрута и гарантирует, что он возвращает маршрут только в том случае, если путь соответствует EXACT-совпадению с текущим URL-адресом.

Поэтому в этом случае мы должны добавить exact маршрут наших Users чтобы он соответствовал только /users:

<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />

Документы объяснить exact в деталях и дать другие примеры.

Ответ 2

Короче говоря, если у вас есть несколько маршрутов, определенных для маршрутизации вашего приложения, заключенных в такой компонент Switch как этот;

<Switch>

  <Route exact path="/" component={Home} />
  <Route path="/detail" component={Detail} />

  <Route exact path="/functions" component={Functions} />
  <Route path="/functions/:functionName" component={FunctionDetails} />

</Switch>

Затем необходимо указать exact ключевое слово для маршрута, путь к которому он также включает в себя другой путь маршрута. Например, домашний путь / включен во все пути, поэтому ему необходимо иметь exact ключевое слово, чтобы отличать его от других путей, начинающихся с /. Причина также похожа на путь /functions. Если вы хотите использовать другой путь маршрута, такой как /functions-detail или /functions/open-door который включает в себя /functions то вам нужно использовать exact для маршрута /functions.

Ответ 3

Ответы все великолепны. Однако у кого-то может возникнуть сомнение: "Почему тогда мы не можем иметь exact для всех маршрутов?" Представьте себе URL-адрес, похожий на этот. https://yourreactwebsite.com/getUsers/userId=? Это пример, в котором идентификатор пользователя будет динамически вводиться в URL, поэтому мы не можем указать exact реквизит в вашем маршрутизаторе.

Ответ 4

точный: bool

При значении true будет совпадать, только если путь в точности совпадает с location.pathname.

**path**    **location.pathname**   **exact**   **matches?**

/one            /one/two              true         no
/one            /one/two              false        yes

Посмотрите здесь:https://reacttraining.com/react-router/core/api/Route/exact-bool