react-router란?
가장 많이 사용되는 라이브러리 중 하나로, 클라이언트 사이드에서 이루어지는 라우팅을 간단하게 해주며 서버 사이드 렌더링을 도와주는 도구들을 제공합니다. react-router
은 웹과 앱, react-router-native
은 앱에 사용 가능합니다. 오늘 다루는 react-router-dom
은 웹에서 사용합니다.
react-router-dom 사용하기
터미널에 npm install react-router-dom
명령어를 입력하여 설치가 완료되면 react-router-dom
으로부터 BrowserRouter, Route, Switch
를 import 합니다.
import {BrowserRouter, Route, Switch} from 'react-router-dom';
BrowserRouter
: URL과 UI를 동기화하는 라우터입니다.Route
: 컴포넌트 속성에 설정된 url과 현재 경로가 일치하면 해당하는 컴포넌트나 함수를 렌더링합니다.Switch
: 자식 컴포넌트 route 또는 Redirect 중 매치되는 첫 번째 요소를 렌더링합니다. BrowserRouter만 사용할 때와의 차이점은 하나의 매칭되는 요소만 렌더링한다는 것입니다. 사용하지 않을 경우엔 매칭되는 모든 요소를 렌더링합니다.
라우트 설정
Route
컴포넌트를 사용하여 path
값으로 경로를 설정합니다.
//App.js
import React from 'react';
import ShowPage from './a';
import Hello from './hello';
import {BrowserRouter, Route, Switch} from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<Switch>
<Route exact path="/">
<Hello/>
</Route>
<Route path="/a">
<ShowPage/>
</Route>
</Switch>
</BrowserRouter>
);
}
export default App;
첫 번째 라우트 / 는 Hello 라는 컴포넌트를, 두번째 /a 는 ShowPage 컴포넌트를 보여주게 합니다.
첫 번째 라우트에는 exact
가 붙어있는데, 주어진 경로와 정확히 맞아 떨어져야만 설정한 컴포넌트를 보여줘야 할 때 사용합니다. /a에도 / 문자열이 들어가기때문에, 이렇게 중첩될 수도 있는 라우트는 exact
로 설정해야합니다.
Link 컴포넌트를 사용하여 라우터 이동
react-router-dom에서 import 한 Link
를 사용하여 두 파일 간 이동할 수 있는 링크를 추가합니다. 'a' 태그와 비슷한 Link
는, to 속성에 설정된 링크로 이동합니다. 이 컴포넌트에 전달되는 props들은 컴포넌트 내부의 DOM에도 전달되므로, 일반 DOM 엘리먼트에 설정하듯이 className, style, onClick등의 이벤트를 전달할 수 있습니다.
<a>태그와의 차이점
<a href>의 형식을 사용하면 페이지가 새로고침되기때문에 Link
를 사용합니다. 이 컴포넌트를 사용하면 페이지를 새로 불러오는걸 막고, 원하는 라우트로 화면 전환을 해줍니다.
//Hello.js
import React from 'react';
import { Link } from 'react-router-dom';
export default function Hello() {
return (
<div>
<p>This is Comp 1 page</p>
<Link to="/a">link to /a</Link>
</div>
)
}
//a.js
import React from 'react';
import { Link } from 'react-router-dom';
export default function ShowPage() {
return (
<div>
<p>This is Comp 2 Page</p>
<Link to="/">link to /</Link>
</div>
)
}
참고 자료
'Group Study (2021-2022) > React' 카테고리의 다른 글
[React] 6주차 스터디 - react-axios (0) | 2021.11.16 |
---|---|
[React] 5주차 스터디 - react-bootstrap (0) | 2021.11.08 |
[React] 3주차 스터디 - props (0) | 2021.10.16 |
[React] 3주차 스터디 - Component (0) | 2021.10.15 |
[React] 2주차 스터디 - useState 변수 상태 관리하기 (0) | 2021.10.10 |