반응 : <Route exact path =“/”/>와 <Route path =“/”/>의 차이점


162

누군가가 차이점을 설명 할 수 있습니까?

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

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

나는 '정확한'의 의미를 모른다


1
대답은 모두 훌륭합니다. 그러나 "왜 모든 경로에 대해 <code> 정확한 </ code>을 가질 수 없습니까?"와 같은 의심이 생길 수 있습니다. 이와 같은 URL을 상상해보십시오. <code> yourreactwebsite.com/getUsers/userId= ? </ code> 이것은 사용자 ID가 URL에 동적으로 제공되는 예이므로 여기에서 라우터의 <code> exact </ code> 소품을 사용할 수 없습니다.
VIJAYKUMAR REDDY ALAVALA

답변:


264

이 예에서는 실제로 아무것도 없습니다. 이 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가면 정의 된 모든 경로를 다시 통과하고 찾은 첫 번째 경기를 반환합니다. 반응 라우터는 부분 일치를 수행하므로 /users부분적으로 일치 /users/create하므로 Users경로를 다시 잘못 반환 합니다!

exact매개 변수는 경로에 대한 부분 일치를 비활성화하고 경로가 현재 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

4
exact내 의견으로는 기본값이 될 것입니다
Alexander Derck

서로 다른 구성 요소에 각 경로 정의가있는 경우 /admin//users관리 구성 요소와 /admin/users/create루트 구성 요소에서 무엇을 의미합니까 ??? 현재 이러한 상황이 발생하고 일반적인 exact솔루션이 제대로 작동하지 않습니다.
Yulio Aleman Jimenez

이 동작은 두 경로가 모두 동일한 수준의 스위치 부모 (또는 구성 요소)에있는 경우에만 작동한다고 생각합니다.
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
이것은 기본적으로 exactattribute / prop 의 의미를 설명 할 것이 아니므로 반드시 "답변"이 아닙니다. OP가 실제로 확실하지 않은 문제에 대한 해결책을 제시하기보다는 실제로 요청되는 문제를 해결해야합니다.
빅터 자마 니안
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.