React-Router란?
Package : React-Router-Dom
React-Router는 React에서의 라우팅 기능을 제공한다.
Route요소의 Path속성을 설정하여 각 Path별 컴포넌트를 렌더링 할 수 있다.
a요소의 href로 URL을 설정해도 각 URL별로 렌더링을 할 수 있지만,
Link요소의 to로 URL을 설정한다면 각 URL별로 새로고침없는 렌더링을 제공할 수 있다
왜 계속 Path="/"에 해당되는 컴포넌트만 렌더링될까?
다음코드를 보자
1번코드
<Router>
<Switch>
<Route path="/">
<MovieHome />
</Route>
<Route path="/movie/:id">
<Detail />
</Route>
</Switch>
</Router>
위와같은 코드에서
"/"로 접근할때 "/movie/:id"로 접근할 때 모두
MovieHome이 렌더링된다.
그렇지만
2번코드
<Router>
<Switch>
<Route path="/movie/:id">
<Detail />
</Route>
<Route path="/">
<MovieHome />
</Route>
</Switch>
</Router>
위의 코드에서는
"/movie/:id"로 접근할때는 <Detail>이 렌더링되고,
"/"로 접근할때는 <MovieHome>이 렌더링된다.
의도에 맞게 작동해주는 것 이다.
잠시동안 추측해보자면,
코딩이 작성된 순서에 맞게 동작을 하는것인가 싶다.
무슨말이냐하면
"/movie/123"이라는 URL을 호출할때
1번코드의 경우
==> 순서에 맞게 "/" path만을 보고 "/movie/123"에 해당된다고 판단하여 MovieHome렌더링
*"/movie/123"에도 "/"가 있으므로, 있다고 판단한게 아닐까 추측
2번코드의 경우
==> 순서에 맞게 "/movie/:id" path에 정확히 분기되어 Detail렌더링
이처럼 Route의 순서가 라우팅에 영향을 미치는게 맞기때문에
코드를 작성할 시 영향을 주어야할까?
React-Router-dom의 공식문서를 참조해봤다.
(https://v5.reactrouter.com/web/example/basic)
아래 하단코드를보면
exact라는 속성이 Route요소에 삽입된것을 볼 수 있다.
무슨 의미일까?
정확한 Path와 매치될때만 해당되는것을 의미한다.
즉, exact가 설정되지않는다면
정확한 Path경로가 아니더라도, 요청하는 Path에 해당되는 부분이 있으면 렌더링된다.
그렇지만, exact가 설정된다면
정확한 Path경로 일 때만 렌더링된다.
문제는 모두 해결되었다.
다시 1번코들로 돌아간 후 수정해보자
<Router>
<Switch>
<Route exact path="/">
<MovieHome />
</Route>
<Route path="/movie/:id">
<Detail />
</Route>
</Switch>
</Router>
정상작동됨을 확인하였다.
'재학습 > 오류' 카테고리의 다른 글
[Docker] nodejs 도커파일 빌드 시 에러 (0) | 2022.12.26 |
---|---|
[IntelliJ] 인텔리제이 폴더에 Java class 파일 생성버튼이 없어요! (0) | 2022.06.09 |
[React] Uncaught TypeError: Cannot read properties of undefined (reading 'map') (0) | 2022.02.03 |
[React] Select Option의 Value 속성에 Object를 어떻게 다룰 수 있을까? (2) | 2022.01.28 |
[React] Each child in a list should have a unique "key" prop. (0) | 2022.01.26 |