일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리액트
- vue 지역 컴포넌트
- 프로그래머스 데브코스
- SCSS forward
- 다른컴퓨터에서 git사용
- KDT 프로그래머스
- Spacer
- vuex map
- Vue
- 고양이 사진 검색기
- 폼 입력 바인딩
- 이벤트 수식어
- SCSS use
- 프로그래머스 K_Digital Training
- 리스트 렌더링
- flex
- 프로그래머스 데브코스 프론트엔드
- postcss
- git 같은계정 다른 컴퓨터
- vue 이벤트 수신
- intersection opserver
- 프로그래머스 프론트엔드 데브코스
- nextjs사용법
- KDT 프로그래머스 데브코스 프론트엔드
- 쌓임맥락
- SCSS extend
- vue mixin
- SCSS import
- netlify redirect
- react next
- Today
- Total
혼자 적어보는 노트
[React] react-router-dom - Route / Switch 본문
react-router-dom
react-route-dom은 SPA앱을 만드는 것을 도와주는 package
페이지마다 다른 html파일이 아니라 다른 페이지처럼 보여주는 것이라고 볼 수 있다.
npm에서 설치를 진행한다
npm i react-router-dom
기본 사용법
import { BrowserRouter, Route, Link, Switch } from "react-router-dom";
function App(){
return <BrowserRouter>
<Route path="/member" component={Member}/>
</BrowserRouter>
}
- BrowserRouter : history API로 URL과 UI를 동기화 시키는 라우터
- HashRouter: 기본적으로 BrouswerRouter를 사용하지만 HashRouter는 주소 뒤에 #이 붙으며
#뒤에 적는 것은 서버로 전달이 되지 않아 안전한 라우팅이 가능하다.
- Route : path에는 경로가 들어가고 component는 불러올 component를 설정해준다.
- Link : 'a'태그와 비슷하지만 새로고침 없이 to속성에 설정된 링크로 이동한다.
- Switch : Route와 Redirect중 첫 번째로 매치되는 것을 렌더링한다.
function App(){
return <BrowserRouter>
<Route path="/">
<h1>INDEX</h1>
</Route>
<Route path="/member">
<h1>MEMBER</h1>
</Route>
<Route path="/member/login">
<h1>LOGIN</h1>
</Route>
</BrowserRouter>
}
이렇게 하면 설정해놓은 path에 접근 시 아래와 같은 <h1>태그를 확인할 수 있다.
url: "/"
INDEX
url: "/member"
INDEX
MEMBER
url: "/member/login"
INDEX
MEMBER
LOGIN
이렇게 중첩되서 포함된 경로마다 전부 렌더링을 해준다.
이 부분을 해결하기 위해서는 exact true의 설정이 필요하다.
<Route path="/" exact={true}>
<h1>INDEX</h1>
</Route>
exact true : URL이 오로지 "/"일 때만 rendering을 해준다는 설정.
true값을 생략하고 exact만 적어도 된다. <Route exact path="/"></Route>
이동될 경로 중에 id값을 받아서 이동되는 것들이 있을것이다.
동영상넘버나 상품넘버 등등 고유한 값을 이용한 경로 이동의 경우
Route path 설정을 :id로 해준다
<Route path="/:id">
<div> Product </div>
</Route>
여기서의 /:id는 / 뒤의 모든 문자라는 뜻.
즉 주소창에 /아무문자 를 입력해도 해당 product의 div가 보여진다.
<Route path="/list">
<div> List </div>
</Route>
<Route path="/:id">
<div> Product </div>
</Route>
위와 같이 /list와 /:id의 route를 만들어주었을 경우
/list 경로로 가도 product가 보이는 것을 확인할 수 있다.
그러면 의도에 맞지않게 페이지 세팅이 되는 것인데,
이 중복 매칭을 방지하려면 Switch를 사용하면 된다.
Switch
매칭이 여러개가 맞아도 하나만 보여주고 싶을 때 사용.
즉, 중복 매칭을 방지해 주는 것이다.
사용 방법은 간단하다.
<Switch>
<Route path="/list">
<div> List </div>
</Route>
<Route path="/:id">
<div> Product </div>
</Route>
</Switch>
이렇게 Route의 위아래로 Switch를 감싸주고 /list로 들어가보면
product div가 보이지 않는 것을 확인할 수 있다.
** /:id Route가 코드상으로 위로 올라가면 product div가 보임
'React' 카테고리의 다른 글
[React] useState 사용 (0) | 2021.11.02 |
---|---|
[React] react-route-dom - Link / Link to (0) | 2021.10.30 |
[React] component Llifecycle (0) | 2021.10.24 |
[React] Class Components와 State (0) | 2021.10.22 |
[React] Prop-types (0) | 2021.10.22 |