反応:<Route exact path =“ /” />と<Route path =“ /” />の違い


161

誰かが違いを説明できますか

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

そして

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

「正確」の意味がわかりません


1
答えはすべて素晴らしいです。ただし、「なぜすべてのルートに<code> exact </ code>を使用できないのですか?」このようなURLを想像してみてください。<code> yourreactwebsite.com/getUsers/userId=?</ code>これは、ユーザーのIDが動的にURLに入力される例であるため、ここではルーターの<code> exact </ code>プロップを使用できません。
VIJAYKUMAR REDDY ALAVALA

回答:


263

この例では、実際には何もありません。exactあなたは似た名前を持つ複数のパスを持っている場合paramが戦場に出ました。

たとえば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ルートが誤って再度返されます。

exactparamがルートの部分一致検索を無効にし、パスが現在のURLに完全に一致する場合、それは唯一のルートを返すことを確認します。

したがって、この場合は、ルートのみを追加exactしてUsers、次のものにのみ一致するようにし/usersます。

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

ドキュメントexactは詳細に説明し、他の例を示します。


11
「しかし、app.com/users/createにアクセスすると、定義されたすべてのルートを再び通過し、最初に見つかった一致が返されます。」-実際には、一致が見つかったすべてのルート(完全または部分)が返されます。@Chase DeAndaで説明されている動作は、<Route>が<Switch>タグで囲まれている場合にのみ発生します。
watsabitz 2018年

4
exact私の意見ではデフォルトにする必要があります
Alexander Derck

それぞれのルート定義が異なるコンポーネントにある場合、つまり/admin//users、管理コンポーネントと/admin/users/createルートコンポーネントにある場合はどうでしょうか??? 私は現在この状況にあり、一般的なexact解決策は適切に機能しません。
Yulio Aleman Jimenez

この動作は、両方のルートがスイッチの親(またはコンポーネント)の同じレベルにある場合にのみ機能すると思います
Yulio Aleman Jimenez

1
@ChaseDeAnda必要なのは正反対です。私の状況を明確にし、適切な回答を得るために、SOに新しい回答を書く必要があるかもしれません。
Yulio Aleman Jimenez

7

つまり、アプリのルーティングに複数のルートが定義されている場合、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ルートに使用する必要があります。



-1

最短の答えは

ぜひお試しください。

<switch>
   <Route exact path="/" component={Home} />
   <Route path="/about" component={About} />
   <Route path="/shop" component={Shop} />
 </switch>

1
これは基本的にexact属性/小道具の意味を説明するものではないので、確かに「答え」ではありません。OPに実際にあるかどうかわからない問題の解決策を提供するのではなく、実際に尋ねられる質問に対処するようにしてください。
ビクターザマニアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.