리액트는 single page application 이다.
하나의 url에서 다 처리된다. 어휘력 무엇...
그럼 페이지가 많을때는 어떻게 되는거지?
react router를 쓰면 된단다.
좀 더 가다듬어 보자.
spa는 하나의 url로 로딩이 되고 어떠한 이벤트가 발생 했을 때
새로운 페이지가 열리거나 전체적인 페이지가 리로드 되는 것이 아니라 부분적인 내용만 업데이트 되는 것이다.
이것의 문제는 뒤로가기, 앞으로가기나 즐겨찾기가 안된다는 것이다.
이를 보완한 것이 react-router라고 한다.
$ npx create-react-app router-test
react 프로젝트를 생성해주고
$ yarn add react-router-dom
router를 추가해준다.
react-router-dom은 웹에서 쓰는 거라고 한다.
그럼 뭐가 겁나 깔림
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById("root")
);
index.js에 <BrowserRouter>를 넣어준다.
BrowserRouter는 historyAPI를 이용해서 url과 ui를 동기화 해준다고 한다.
function App() {
return (
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
);
}
App.js
const About = (props) => {
return (
<div>
<h1>소개</h1>
<p>이것은 라우터 실습</p>
</div>
);
};
About.js
const Home = (props) => {
return (
<div>
<h1>홈</h1>
<p>first page</p>
<Link to="/about">소개</Link>
</div>
);
};
Home.js
아 참고로 react는 a태그 대신 Link를 쓰던데 차이가 궁금해서 찾아봤다.
검색해보니까 a 태그로 이동하게 되면 상태값을 잃고 속도가 저하된단다.
Link 컴포넌트는 브라우저의 주소만 바뀌고 새로운 페이지를 불러오지 않는다.
소개를 클릭하면
여기로 넘어온다.
Ref
https://velog.io/@kwonh/React-react-router-dom-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
[React] react-router-dom 시작하기
안녕하세요이번 포스팅은 SPA앱을 만들 때 많이 사용되는 react-router-dom패키지에 대해 알아보겠습니다.create-react-app을 이용해 진행했습니다.react-router - 웹&앱react-router-dom - 웹react-router-native
velog.io
https://velog.io/@velopert/react-router-v6-tutorial
React Router v6 튜토리얼
리액트 라우터 v6를 새로 접하시는 분들을 위한 튜토리얼을 작성했습니다. 리액트 라우터 v6 의 기본적인 사용법, 그리고 이 라이브러리에서 제공하는 다양한 유용한 기능들에 대해서 알아봅시
velog.io
https://gomgomkim.tistory.com/9
[React] Link와 <a>태그의 href의 차이
리액트에서 페이지를 이동할 때는 태그의 href 대신 Link를 사용해야 한다. 이유 태그의 href로 이동하면 상태 값을 잃고 속도가 저하된다. 리액트는 단일 url을 가지고 SPA(Single Page Application)으로 사
gomgomkim.tistory.com
'Programming > react' 카테고리의 다른 글
[인프런 리액트] visualStudio reactProject gitbub 연동하기 (0) | 2022.02.02 |
---|---|
[인프런 리액트] 비주얼 스투디오에서 프로젝트 만들기 (0) | 2022.01.31 |
[인프런 리액트] 리액트 기초 작업환경 구축 (0) | 2022.01.30 |
[리액트 교과서] Babel 설치 (0) | 2022.01.29 |
[리액트 교과서] React, JSX (0) | 2022.01.28 |