TODO
- Router 아무 path 없을 때는 layout 구현, 그 안에 Route 구현
- notFound 페이지 예외 처리 예정
- Layout 에서 NavLink로 링크 구현
- Outlet으로 랜더할 내용 받아줌
- useParams로 parameter 받기
1. 사용할 페이지 간략 내용 views들 생성
- /views/About.js
- /views/About.js
- /views/NotFound.js
- /views/UserDetail.js
- /views/Users.js
- Layout은 조금 이따가
2. 레이아웃 담당할 Layout.js 작성
- react-router-dom이 제공하는 NavLink, Outlet 사용
- NavLink는 a태그 역할 링크 역할
- Outlet은 Content가 담길 곳 명시하는 것 (react-router-dom내부 규칙)
// views/Layout.js
import { NavLink, Outlet } from 'react-router-dom';
import styled from 'styled-components';
const Nav = styled.nav`
height : 100px;
background-color : skyblue;
`
const Main = styled.main`
display: flex;
`
const SideMenu = styled.div`
min-width : 300px;
min-height : 400px;
border : 1px solid grey;
`
const Content = styled.div``
export default function Layout() {
return (
<>
<Nav>
<NavLink to="/">Home</NavLink>
<NavLink to="/about">About</NavLink>
<NavLink to="/user">Users</NavLink>
</Nav>
<Main>
<SideMenu>사이드 메뉴</SideMenu>
<Content>
{/* 각각 컴포넌트들이 보여질 곳 Outlet으로 받아줌 */}
<Outlet/>
</Content>
</Main>
</>
)
}
3. 위의 페이지들을 랜더링할 최상위 컴포넌트 App.js 작성
- BrowserRouter로 전체라우팅 감싸기
- Routes로 라우트들 감싸기
- <Route element={<Layout/>}로 전체 레이아웃 설정
- 전체 레이아웃 안에 이제, 랜더링될 페이지들이 Route 태그로 설정
- 여기서 내부에 랜더링되는 페이지들이 위의 Layout.js 코드 속 Outlet에 표현된다.
- user/3 과 같이 뒤에 파라미터로 id를 받는 경우는 user/:id로 표현
//App.js
import './App.css';
import { BrowserRouter, Route, Routes } from "react-router-dom";
import About from './views/About';
import Home from './views/Home';
import Users from './views/Users';
import UserDetail from './views/UserDetail';
import NotFound from './views/NotFound'
import Layout from './views/Layout';
function App() {
return (
<BrowserRouter>
<Routes>
{/* 아무 path 없으면 레이아웃 자동 만들어줌 */}
<Route element={<Layout/>}>
{/* 최초 슬래시로 갔을 때 */}
<Route index element={<Home/>}/>
<Route path="about" element={<About/>}/>
<Route path="user" element={<Users/>}/>
<Route path="user/:id" element={<UserDetail/>}/>
{/* 예외페이지 처리 */}
<Route path="*" element={<NotFound/>}/>
</Route>
</Routes>
</BrowserRouter>
);
}
export default App;
4. UserDetail.js 에서 useParams를 사용하여 파라미터 받기
// views/UserDetail.js
import { useParams } from "react-router-dom"
export default function UserDetail() {
let params = useParams();
return <h1>UserDetail: { params.id }</h1>
}
[실행결과]
'programming > React' 카테고리의 다른 글
blob/json 형태로 리턴받은 데이터를 엑셀 파일로 추출하기(Get 방식 /Post 방식) (0) | 2023.11.14 |
---|---|
무한 스크롤 구현기(React, Scrollevent, Throttle, Intersection Observer API) (0) | 2023.07.12 |
개발환경에서 CORS 에러 관련 프록시 설정 (0) | 2023.05.03 |
Recoil 새로고침 시 user 데이터 유지하기 (0) | 2023.05.03 |
리액트 빌드시 환경(개발/테스트/상용)에 따라 API 주소 설정하기 (0) | 2022.04.04 |