Може хтось пояснить різницю між
<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/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
точно: бул
Якщо це правда, відповідатиме лише якщо шлях відповідає 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
атрибута / опори, і, отже, це, безумовно, не є "відповіддю". Вам слід спробувати вирішити запитання, яке насправді задають, а не давати рішення проблеми, для якої ви не впевнені, що ОП насправді має.