리액트 v6.0이 되면서 navLink가 조금 바뀐 것 같다.
리액트 라우터 사용법
설치
npm install react-router-dom
라우터적용
//index.js
import {BrowserRouter} from 'react-router-dom'
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
HTML5의 history API를 제공하는 Router 이다.
속성(props)으로 줄 수 있는 것은 다음과 같다.
- basename: base URL을 설정해줄 수 있다.
<BrowserRouter basename="/calendar">
<Link to="/today"/> // renders <a href="/calendar/today">
<Link to="/tomorrow"/> // renders <a href="/calendar/tomorrow">
...
</BrowserRouter>
리액트로 배포를 하게 될때
package.json에
"homepage": "http://kangyunho.com/github-io",
처럼 쓰게 된다.
CRA에서 만든 프로젝트는 루트('/') 를 기준 URL로 해서 프로젝트를 생성하지만,
배포시에는 다르기 때문에
import { BrowserRouter } from 'react-router-dom';
const rootNode = document.getElementById('root');
ReactDOM.createRoot(rootNode).render(
<React.StrictMode>
<BrowserRouter basename={process.env.PUBLIC_URL}>
<App />
</BrowserRouter>
</React.StrictMode>,
);
와 같이 써주면 접근할 baseURL을 알아서 찾아서 들어가게 된다.
- getUserConfirmation
페이지 전환시에 사용할 콜백을 넣을 수 있다.
<BrowserRouter
getUserConfirmation={(message, callback) => {
// this is the default behavior
const allowTransition = window.confirm(message);
callback(allowTransition);
}}
/>
- forceRefresh
<BrowserRouter forceRefresh={true} />
페이지 전환시에 ssr처럼 전체 페이지 refresh해준다.
사실상 baseURL말고는 현재 프로젝트에서도 쓸 일이 없었고 앞으로도 없을 것 같은 느낌이다...
라우트 주소 설정하기
<Routes>
<Route path="주소규칙1" element={해당 페이지 컴포넌트1} />
<Route path="주소규칙2" element={해당 페이지 컴포넌트2} />
</Routes>
와 같이 설정 해 놓으면 해당 주소에 접근하면 해당 element를 보여준다.
spa를 위해 존재하는 리액트답게 라우트를 이용하면 엄청 쉽게 spa를 만들 수 있다.
원하는 곳에서 이동이 일어날 때 link컴포넌트를 이용해서 a태그처럼 사용할 수 있다.
link컴포넌트는 a태그 랑은 다르게 새로고침없이 history api를 이용해서 알아서 주소만 바꿔준다.
바닐라 js로 history api이용해서 라우터 구현했을때 머리 빠지는줄 알았는데... 킹갓리액트..
< Link to="경로">아무 글< /Link>
Not Found 주소
<Route path="*" element={<NotFound />} />
와 같이 * 를 이용하면 not found일때 어떤것을 보여줄지 정할 수 있다.
다만 위에서 설정해준 baseUrl/* 로 인식하기 때문에
'http://localhost:3000/react-project/1번페이지' 로 접근해야 할 것을
'http://localhost:3000/react-project/이상한페이지' 로 접근하면 잘 잡아주는데
'http://localhost:3000/react' 로 접근해야 하면 못 잡아준다.
NavLink
링크의 주소와 현재 경로가 일치하면 특정 style을 적용할 수 있다.
그러니까 link랑 똑같은데 link됏을때 적용될 스타일을 정할 수 있다.
navigator같은거 만들면
이렇게 버튼 눌렀을때 뭐가 눌린상태인지 알려주기 위해서 쓰면 편리한 녀석이다.
<NavLink style={({isActive}) => isActive ? activeStyle : inActiveStyle}
<NavLink className={({isActive}) => isActive ? 'active' : inActiveStyle}
처럼 사용하면 된다.
className도 줄 수 있어서 꽤 활용도가 높은 편이다.
참고:
리액트를 다루는 기술
https://v5.reactrouter.com/web/api/BrowserRouter/getuserconfirmation-func
'프로그래밍 공부내용 > 리액트(React)' 카테고리의 다른 글
1. Introduction - MSW (Mocking Service Worker) 공식문서 따라 읽기 및 사용설명 (0) | 2022.05.17 |
---|---|
useRoutes() 훅 (0) | 2022.05.09 |
리액트와 순수함수 (0) | 2022.05.05 |
Create portal (0) | 2022.05.04 |
절대경로로 import 하기 (0) | 2022.05.04 |