라우팅
사용자가 요청한 URL에 따라 알맞은 페이지를 보여주는 것
SPA
하나의 페이지로 이루어진 애플리케이션
리액트에서 사용하는 라우트 시스템
React Router
yarn add react-router-dom
src/index.js
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
페이지 컴포넌트 만들기
<Link to="경로">링크 이름</Link>
src/routes/Home.js
import { Link } from "react-router-dom"
const Home = () => {
return (
<div>
<h1>홈</h1>
<p>가장 먼저 보여지는 페이지 입니다</p>
<Link to="/about">소개</Link>
</div>
)
}
export default Home
src/routes/About.js
const About = () => {
return (
<div>
<h1>소개</h1>
<p>리액트 라우터 사용 프로젝트입니다</p>
</div>
)
}
export default About
src/App.js
<Route path="주소규칙" element={보여줄 컴포넌트 JSX} />
const App = () => {
return(
<Routes>
<Route path="/" element={<Home/>}/>
<Route path="/about" element={<About/>}/>
</Routes>
)
}
export default App;
URL 파라미터
useParams
라는 Hook을 이용하여 조회할 수 있다.쿼리스트링
useLocation
라는 Hook을 이용하여 조회할 수 있다.useSearchParams
라는 Hooks을 통해서 쿼리스트링을 쉽게할 수 있다.Home.js
import { Link } from "react-router-dom"
const Home = () => {
return (
<div>
<h1>HOME</h1>
<ul>
<li><Link to="/about/zerome">zerome 소개</Link></li>
<li><Link to="/about/zerome2">zerome2 소개</Link></li>
<li><Link to="/about/zerome3">zerome3 소개</Link></li>
<li><Link to="/todo">Todo</Link></li>
</ul>
</div>
)
}
export default Home
About.js
import { useParams } from "react-router-dom"
const data = {
zerome: {
name: '제로미',
description: '프론트개발자'
},
zerome2: {
name: '제로미투',
description: '백엔드개발자'
},
}
const About = () => {
const params = useParams()
const profile = data[params.username]
return (
<div>
<h1>소개</h1>
{profile ? (
<div>
<h2>{profile.name}</h2>
<p>{profile.description}</p>
<p>쿼리스트링: {location.search}</p>
</div>
) : (
<p>존재하지 않는 프로필입니다.</p>
)}
</div>
)
}
export default About
App.js
import { Route, Routes } from 'react-router-dom';
import Home from './routes/Home';
import About from './routes/About';
import Todo from './routes/Todo';
const App = () => {
return(
<Routes>
<Route path="/" element={<Home/>}/>
<Route path="/about/:username" element={<About/>}/>
<Route path="/todo" element={<Todo/>}/>
</Routes>
)
}
export default App;