카테고리 없음
React Router
동곤일상
2025. 7. 2. 15:49
반응형
React Router
React Router는 SPA에서 브라우저 새로고침 없이 URL 경로에 따라 페이지를 전환할 수 있게 해주는 라이브러리입니다.
설치 (꼭 프로젝트가 존재하는 폴더로 이동 후 깔 것)
npm install react-router-dom
package.json 파일 내에
"react-router-dom": "^7.6.3",
가 존재하면 성공적으로 설치된거임
사용 예시
App.js
/* eslint-disable no-unused-vars */
import logo from './logo.svg';
import './App.css';
import Hello from './component/hello';
import Header from './component/Header';
import Day from './component/Day';
import DayList from './component/DayList';
import {BrowserRouter,Routes,Route} from 'react-router-dom';
import NotFoundPage from './component/NotFoundPage';
/*
리액트 라우팅 기능을 위한 설정
리액트 라우팅 : URL요청 별 다른 컴포넌트호출
*/
function App() {
return (
<BrowserRouter>{/*BrowserRouter : 최상위 라우팅 컴포넌트*/}
<div className="App">
<Header/>
<Routes>{/*Routes : Route컴포넌트의 부모 컴포넌트 */}
<Route path="/" element={<DayList/>}/>{/*요청 시 DayList컴포넌트 조회 */}
<Route path="/day/:day" element={<Day/>}/>{/*요청 시 Day컴포넌트 조회 /day/:day -> ex) local.../day/xxx */}
<Route path="*" element={<NotFoundPage/>}/>{/*페이지가없는경우 */}
</Routes>
</div>
</BrowserRouter>
);
}
export default App;
BrowserRouter->Routes->Route 구조
(중요포인트 : path="*" element={<NotFounPage/>}가 가장 마지막에있는것을 확인할 수 있는데
위의 주소를 제외한 모든 주소들을 받는단 의미 ) (맨 위에써버리면 모든 요청을 받아버림)
day.js
(Day 컴포넌트) (위에 올려둔 data.json을 사용함)
import data from "../db/data.json"
import {useParams} from "react-router-dom" //라우터에서 제공되는 parameter를 가져옴
export default function Day(){
const {day} = useParams();
//(word.day(json객체의 키 값)===day(변수값)
//useParams() : 문자열
//word.day : 숫자
const wordlist = data.words.filter(word=>(word.day===Number(day)))
return(
<>
<h2>Day{day}</h2>
<table>
<tbody>
{/*"words": [
{
"id": 1,
"day": 1,
"eng": "book",
"kor": "책",
"isDone": false
},{....}] */}
{/*data.words(배열)를 순회해 각 요소에 id,eng,kor만 뽑아서 하나의행으로*/}
{wordlist.map(word=>(
<tr>
<td>{word.eng}</td>
<td>{word.kor}</td>
</tr>
))}
</tbody>
</table>
</>
);
}
dayList.js
(DayList 컴포넌트)
import data from "../db/data.json"
import {Link} from "react-router-dom"
/*
<li key={m.id}></li>
리액트에서 리스트항목 출력 시 고유한값 필요
변경된 부분의 판단을 위해 key속성 사용
*/
export default function DayList(){
return(
<>
<h2>day 리스트</h2>
<ul className="list_day">
{data.days.map((m)=>(
<li key={m.id}>
<Link to={`/day/${m.day}`}>Day{m.day} </Link>
</li>
))}
</ul>
</>
)
}
클릭 시 각 숫자를 기반으로 /day/숫자 로 이동
NotFoundPage.js
(NotFoundPage 컴포넌트)
a태그 : 외부링크이동 (HTML기본)
- 브라우저 전체페이지를 새로고침
Link태그 : React router전용태그
- 화면에 새로고침 X
import {Link} from "react-router-dom"
export default function NotFoundPage(){
return(
<>
<h2>없는페이지임</h2>
<Link to="/">돌아가기</Link>
</>
);
}
시연