반응 : <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.