[React] React Router 사용법
in Development on React
![[React] React Router 사용법](/assets/img/react.png)
React Router란?
React Router에 대해 알기 전에 먼저 라우팅이란 개념부터 알아야 할꺼 같다. 라우팅이란? 사용자가 요청한 URL에 따라 해당 URL에 맞는 페이지를 보여주는 것이라고 생각할 수 있다. 그래서 리액트 라우터를 사용해서 새로운 페이지를 렌더링해서 불러올 수 있다.
React Router 사용법
설치
npm install react-router-dom
프로젝트에 라우터 적용
<BrowserRouter>
라는 컴포넌트로 감싸서 라우터를 적용시킨다. BrowserRouter는 HTML5를 지원하는 브라우저의 주소를 감지 한다.- 프로젝트의 최상단인 index.js에서 사용한다.
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './components/App';
import { BrowserRouter } from 'react-router-dom';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
Route: 특정 주소에 컴포넌트 연결
-
- 여러 Route 감싸서 그 중 규칙이 일치하는 라우트 단 하나만을 렌더링 시켜주는 역할
-
- path: 경로
- element: 컴포넌트
- 여러 라우팅을 매칭하고 싶은 경우 URL 뒤에 * 을 사용하면 된다.
- exact는 path가 정확하게 일치하는 경우에만 동작하도록 하는 prop
import './App.css';
import { Routes, Route } from 'react-router-dom';
import Main from './views/MainPage/Main';
import Login from './views/LoginPage/Login';
import Register from './views/RegisterPage/Register';
import Header from './views/Header/Header';
import Test from './views/Test/Test';
function App() {
return (
<div>
<Header />
<Routes>
<Route exact={true} path='/' element={<Main />} />
<Route path='login' element={<Login />} />
<Route path='register' element={<Register />} />
<Route path='test' element={<Test />} />
</Routes>
</div>
);
}
export default App;
Link를 이용하여 동작
- 웹 페이지에서 주로 링크를 보여줄 경우 a태그 이용 -> a 태그 이용시 페이지를 새롭게 불러옴
- Link 사용시 History API를 통해 브라우저 주소의 경로만 바꿔주는 기능
import React from 'react';
import { Link } from 'react-router-dom';
import classes from './Header.module.css';
function Header() {
return (
<div className={classes.div}>
<span className={classes.span}>
<Link to='/'>main</Link>
</span>
<span className={classes.span}>
<Link to='/login'>login</Link>
</span>
<span className={classes.span}>
<Link to='/register'>register</Link>
</span>
<span className={classes.span}>
<Link to='/test'>test</Link>
</span>
</div>
);
}
export default Header;
main페이지와 login, register페이지를 이동하더라도 화면 상단에 링크를 남겨두기 위해 Header컴포넌트를 따로 만들었다.
파라미터와 쿼리
- 파라미터 : /product/meal
- 특정 id나 이름을 가지고 조회를 할 때 사용
- 쿼리 : /about?details=true
- 어떤 키워드를 검색하거나, 요청을 할 때 필요한 옵션을 전달 할 때 사용
useReactRouter Hook
- useHistory()
- 스택에 현재까지 이동한 url 경로들이 담겨있는 형태로 주소를 임의로 변경하거나 되돌아갈 수 있도록 해줌
- action: 최근에 수행된 action(push, pop,. replace)
- push: 새로운 URL이 history에 추가, 새로운 주소로 이동할 때
- pop: 새로운 URL이 history에 제거, 뒤로 가기
- replace: 최근 경로를 history 스택에서 replace해서 페이지 이동
- block(propt): history 스택의 push와 pop동작을 제어
- go(n): history 스택의 포인터를 n으로 이동
- goBack(): 이전 페이지로 이동
- goForward(): 앞 페이지로 이동
- length: 전체 history 스택의 길이
- location: 현재 페이지의 정보
- push(path, state): 새 경로를 history 스택에 push해서 페이지 이동
- replace(path, state): 최근 경로를 history 스택에서 replace해서 페이지 이동
- useRouteMatch()
- Route path와 URL의 매칭에 대한 정보를 가지고 있음
- isEact: true이면 경로가 완전히 정확할 경우에만 수행
- params: 경로에 전달된 파라미터 값을 가진 객체
- path: Route에 정의된 경로
- url: 클라이언트로부터 실제 요청 받은 경로
- useLocation()
- 현재 페이지에 대한 정보를 가짐
- hash: 현재 페이지의 hash값
- pathname: 현재 페이지의 경로
- search: 현재 페이지의 query string
- useParams()
- 경로에 전달된 파라미터 값을 가진 객체
Reference
https://goddaehee.tistory.com/305
https://velopert.com/3417
https://velog.io/@younoah/react-router-dom