TIL
24. 07. 24 TIL
효ㄷi
2024. 7. 24. 20:59
중첩 라우팅과 outlet 컴포넌트
= 페이지 안에 또 다른 페이지를 넣을 수 있게 해주는 기술
1. 중첩 라우팅 개념
큰 페이지 안에 작은 페이지들을 정의하는 방법임
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import DashboardLayout from './DashboardLayout';
import Profile from './Profile';
import Settings from './Settings';
import Reports from './Reports';
function App() {
return (
<BrowserRouter>
<Routes>
{/* 대시보드 경로 */}
<Route path="/dashboard" element={<DashboardLayout />}>
{/* /dashboard 경로에서 기본으로 보여줄 페이지 */}
<Route index element={<Profile />} />
{/* /dashboard/settings 경로 */}
<Route path="settings" element={<Settings />} />
{/* /dashboard/reports 경로 */}
<Route path="reports" element={<Reports />} />
</Route>
</Routes>
</BrowserRouter>
);
}
2. outlet 컴포넌트
부모 컴포넌트 안에서 자식 컴포넌트가 어디에 보여질지 결정
쉽게 말해, outlet은 자식 컴포넌트를 위한 자리 표시자 역할을 함
import { Outlet } from 'react-router-dom';
function DashboardLayout() {
return (
<div>
<header>Header Section</header>
<main>
<Outlet /> {/* 자식 컴포넌트가 여기에 렌더링됩니다. */}
</main>
<footer>Footer Section</footer>
</div>
);
}
* 정리
1. 자식 컴포넌트를 별도의 파일에 정의함 (ex. profile.js, setting.js, reports.js)
2. 부모 컴포넌트에서 outlet 사용해 위치 지정
3. 중첩 라우팅 지정
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import DashboardLayout from './DashboardLayout';
import Profile from './Profile';
import Settings from './Settings';
import Reports from './Reports';
function App() {
return (
<BrowserRouter>
<Routes>
{/* 부모 경로 설정: /dashboard */}
<Route path="/dashboard" element={<DashboardLayout />}>
{/* 자식 경로 설정 */}
<Route index element={<Profile />} /> {/* /dashboard 경로에서 기본으로 보여줄 페이지 */}
<Route path="settings" element={<Settings />} /> {/* /dashboard/settings 경로 */}
<Route path="reports" element={<Reports />} /> {/* /dashboard/reports 경로 */}
</Route>
</Routes>
</BrowserRouter>
);
}
export default App;
3. 중첩 라우팅 vs children을 사용한 공통 레이아웃
* 중첩 라우팅은 각 경로마다 다른 레이아웃을 사용할 수 있게 해줌
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Home />} />
<Route path="about" element={<About />} />
</Route>
</Routes>
* children은 모든 경로에 동일한 레이아웃을 적용하고 싶을 때 사용
<Layout>
<Routes>
<Route path="/" element={<Home />} />
<Route path="about" element={<About />} />
</Routes>
</Layout>