Может кто-нибудь объяснить разницу между
<Route exact path="/" component={Home} />
и
<Route path="/" component={Home} />
Я не знаю значение слова "точный"
Может кто-нибудь объяснить разницу между
<Route exact path="/" component={Home} />
и
<Route path="/" component={Home} />
Я не знаю значение слова "точный"
Ответы:
В этом примере ничего особенного. Параметр exact
вступает в действие, когда у вас есть несколько путей с одинаковыми именами:
Например, представьте, что у нас есть Users
компонент, отображающий список пользователей. У нас также есть CreateUser
компонент, который используется для создания пользователей. URL для CreateUsers
должен быть вложен в Users
. Таким образом, наша установка может выглядеть примерно так:
<Switch>
<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Теперь проблема здесь, когда мы идем к http://app.com/users
маршрутизатору, пройдемся по всем нашим определенным маршрутам и вернем первое найденное совпадение. Так что в этом случае он Users
сначала найдет маршрут, а затем вернет его. Все хорошо.
Но, если бы мы пошли на http://app.com/users/create
это, он снова прошел бы через все наши определенные маршруты и вернул ПЕРВОЕ совпадение, которое он нашел. Маршрутизатор React выполняет частичное сопоставление, поэтому /users
частичное сопоставление приводит к /users/create
неправильному возвращению Users
маршрута!
Параметр exact
отключает частичное сопоставление для маршрута и гарантирует, что он возвращает маршрут, только если путь является ТОЧНЫМ совпадением с текущим URL.
Поэтому в этом случае мы должны добавить exact
к нашему Users
маршруту, чтобы он совпадал только с /users
:
<Switch>
<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Документы exact
подробно объясняют и приводят другие примеры.
exact
по умолчанию должен быть по моему мнению
/admin//users
в виду компонент Admin и компонент /admin/users/create
Root ??? У меня сейчас такая ситуация и типовое exact
решение не работает должным образом.
Короче говоря, если у вас есть несколько маршрутов, определенных для маршрутизации вашего приложения, заключенных в 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
маршрута.
Посмотрите здесь: https://reacttraining.com/react-router/core/api/Route/exact-bool
точный: bool
При значении true будет совпадать, только если путь совпадает с location.pathname
точным.
**path** **location.pathname** **exact** **matches?**
/one /one/two true no
/one /one/two false yes
Самый короткий ответ
Пожалуйста, попробуйте это.
<switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/shop" component={Shop} />
</switch>
exact
атрибута / реквизита и, следовательно, не является «ответом». Вы должны попытаться ответить на вопрос, который на самом деле задается, вместо того, чтобы дать решение проблемы, которую вы не уверены в том, что на самом деле OP имеет.