티스토리 뷰
라우터를 사용하려면 설치부터 해야함!
두 개 모두 설치해야 웹에서 같이 쓸 수 있음
npm i react-router
npm i react-router-dom
import { BrowserRouter, HashRouter } from 'react-router-dom';
이 둘을 자주 사용
<BrowserRouter />
import React from 'react';
import { BrowserRouter, Route, Routes, Link } from 'react-router-dom';
import NumberBaseball from './NumberBaseball';
import RSP from './RSP';
import Lotto from './Lotto';
const Games = () => {
return (
<BrowserRouter>
<div>
<Link to="/number-baseball">숫자야구</Link>
<Link to="/rock-scissors-paper">가위바위보</Link>
<Link to="/lotto-generator">로또추첨기</Link>
</div>
<Routes>
<Route path="/number-baseball" component={NumberBaseball} />
<Route path="/rock-scissors-paper" component={RSP} />
<Route path="/lotto-generator" component={Lotto} />
</Routes>
</BrowserRouter>
)
}
export default Games;
리액트 라우터는 눈속임
페이지가 여러개 있는게 아니라 여러개 있는 척 하는 것!
페이지가 실제로는 존재하지 않고 리액트 라우터가 가상으로 만들어내는 페이지임
그래서 a태그를 사용하면 에러가 나고 react-router-dom에 있는 Link를 사용해야함!
a태그이기는 하지만 다른 페이지로 넘어가는게 아니라 router를 불러주는 역할을 함
이렇게 사용
const Games = () => {
return (
<BrowserRouter>
<div>
<Link to="/number-baseball">숫자야구</Link> // Link 사용
<Link to="/rock-scissors-paper">가위바위보</Link>
<Link to="/lotto-generator">로또추첨기</Link>
</div>
<Routes>
<Route path="/number-baseball" component={NumberBaseball} /> // path에 임의로 정해준 주소 to의 주소와 같음
<Route path="/rock-scissors-paper" component={RSP} />
<Route path="/lotto-generator" component={Lotto} />
</Routes>
</BrowserRouter>
)
}
클릭한 컴포넌트를 불러온 것이지 실제로 여러 페이지가 있는 것이 아님
> 주소를 입력하거나, 컴포넌트가 눌러진 상태에서 새로고침을 하면 찾을 수 없음
서버가 인식하고 못찾는다고 함, 검색엔진에게 알려주려면 서버에 세팅을 해줘야함
<Link> 부분은 공통인 부분
<Routes> 부분이 화면이 바뀌는 부분
<HashRouter />
import React from 'react';
import { HashRouter, Route, Routes, Link } from 'react-router-dom';
import NumberBaseball from './NumberBaseball';
import RSP from './RSP';
import Lotto from './Lotto';
const Games = () => {
return (
<HashRouter>
<div>
<Link to="/number-baseball">숫자야구</Link>
<Link to="/rock-scissors-paper">가위바위보</Link>
<Link to="/lotto-generator">로또추첨기</Link>
</div>
<Routes>
<Route path="/number-baseball" component={NumberBaseball} />
<Route path="/rock-scissors-paper" component={RSP} />
<Route path="/lotto-generator" component={Lotto} />
</Routes>
</HashRouter>
)
}
export default Games;
생긴건 똑같은데 주소에 #(hash)가 생김
<HashRouter />
<BrowserRouter />
새로고침해도 동작함
#뒤에 부분은 리액트 라우터랑 브라우저는 앎, 서버는 인식을 못함
> 검색엔진이 잡아내지 못함 그래서 잘 안 씀, 서버에 추가적인 작업을 해줘야함
728x90
'유튜브 강의' 카테고리의 다른 글
코딩앙마 자바스크립트 중급 강의 1. 변수, 호이스팅, TDZ (0) | 2021.12.22 |
---|---|
제로초 리액트 강의 9.2 params, withRouter, 쿼리스트링, Switch, exact (0) | 2021.12.03 |
제로초 리액트 강의 8 Context API (0) | 2021.11.28 |
제로초 리액트 강의 7 useReducer, 성능최적화 (0) | 2021.11.17 |
제로초 리액트 강의 6 로또 추첨기 만들기, useEffect, useMemo, useCallback (0) | 2021.11.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- vscode
- git
- 깃
- 드림코딩
- 파이썬
- 김버그
- 코딩앙마
- 저스트코드
- 자바스크립트
- 회고
- scss
- js
- 제이쿼리
- 코드잇
- javascript
- TS
- React
- Til
- 스파르타코딩클럽
- 타입스크립트
- map
- vue
- 비주얼스튜디오코드
- Typescript
- html
- CSS
- 리액트
- 제로초
- 구름에듀
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함