728x90
리액트로 블로그를 만든다고 가정하자. 그럼 상단부 헤더, 메뉴와 같이 반복적으로 랜더링해줘야 하는 경우가 있을 것이다.
즉, '공통 레이아웃 컴포넌트'가 필요한데, 이를 위해 Outlet 컴포넌트를 사용하면 된다.
import { Outlet } from 'react-router-dom';
const Layout = () => {
return (
<div>
<header style={{ background: 'lightgray', padding: 16, fontSize: 24 }}>
Header
</header>
<main>
{/* JSX 사이의 children을 보여준다 */}
<Outlet />
</main>
</div>
);
};
export default Layout;
Layout이라는 컴포넌트 안에 <header>와 <main> 엘리먼트를 만들어준다. header에는 우리가 생각하는 헤더 메뉴가 들어갈 자리고, main에는 이 Layout이 속한 JSX 구문의 children이 <Outlet />을 통해 표현된다.
그리고 이 Layout 컴포넌트로 다른 컴포넌트들을 감싸줘야 한다.
import { Route, Routes } from 'react-router-dom';
import About from './pages/About';
import Home from './pages/Home';
import Profile from './pages/Profile';
import Articles from './pages/Articles';
import Article from './pages/Article';
import Layout from './Layout';
const App = () => {
return (
<Routes>
<Route element={<Layout />}>
<Route path='/' element={<Home />} />
<Route path='/about' element={<About />} />
<Route path='/profiles/:username' element={<Profile />} />
</Route>
{/* Routing 중첩 */}
<Route path='/articles' element={<Articles />}>
<Route path='/articles/:id' element={<Article />} />
</Route>
</Routes>
);
};
export default App;

위처럼 감싼 profiles/:username 경로의 페이지는 이와 같이 Header가 표현된다.
728x90
'Research > React' 카테고리의 다른 글
React_NotFound 페이지 만들기 (0) | 2023.10.30 |
---|---|
React_게시글 목록에서 현재 게시글 스타일 표시하기 (0) | 2023.10.30 |
What is React Routing (0) | 2023.10.27 |
useRef. 렌더링과 상관없이 참조 (0) | 2023.10.25 |
useCallback도 최적화 전문. 함수 재생성 여부 결정 (0) | 2023.10.25 |
댓글