1강 — 파일 기반 라우팅
2024 DTC
| → / Space | 다음으로 |
| ← | 이전으로 |
| ↓ / ↑ | 같은 주제 안에서 단계 이동 |
| O | 전체 슬라이드 한눈에 보기 |
| F | 전체화면 |
아래쪽 화살표가 보이면 그 주제는 단계별로 이어집니다
React로 웹사이트를 만들 때
매번 하던 일들을 미리 해둔 도구
npm install react-router-dom
// 라우팅 직접 설치
// 검색엔진이 빈 화면만 본다
<div id="root"></div>
// 첫 화면이 뜰 때까지 흰 화면
| 라우팅 | 폴더만 만들면 끝 |
| SEO | 서버에서 미리 그려서 보낸다 |
| 데이터 | 컴포넌트에서 바로 가져온다 |
| 이미지 · 폰트 | 알아서 최적화 |
| 배포 | Vercel에 그대로 |
Next.js 앱을 띄우려면
npx create-next-app@latest my-app
cd my-app
npm run dev
app/page.js
export default function Page() {
return <h1>안녕하세요</h1>;
}
주소를 만들려면
// React (react-router)
<Route path="/about" element={<About />} />
Next에서는 어떻게 할까요?
폴더 이름이 그대로 주소가 된다
app/about/page.js
export default function About() {
return <h1>소개 페이지</h1>;
}
page.js 가 있어야 화면이 된다page.js 없는 폴더는 주소가 아니다화면 사이를 오가려면
import Link from 'next/link';
<Link href="/about">소개</Link>
<a href="/about">소개</a>
여기서 Link 대신 a 태그를 쓰면?
'use client';
import { useRouter } from 'next/navigation';
const router = useRouter();
router.push('/blog');
주소에서 값을 꺼내려면
대괄호로 감싼 폴더 이름이 변수가 된다
app/blog/[id]/page.js
export default function Post({ params }) {
return <h1>{params.id}번 글</h1>;
}
useParams()
{ params }
여러 화면이 틀을 나눠 쓰려면
app/layout.js
export default function RootLayout({ children }) {
return (
<html lang="ko">
<body>
<Header />
{children}
<Footer />
</body>
</html>
);
}
Header
Footer
안쪽 layout은 바깥 layout 안에 들어간다
app/layout.js 는 필수. html과 body가 여기 있다이름만 맞추면 동작하는 파일들
| page.js | 화면 |
| layout.js | 공통 틀 |
| loading.js | 불러오는 중 화면 |
| error.js | 에러 화면 |
| not-found.js | 404 화면 |
loading과 error는 3강에서 자세히
app/not-found.js
export default function NotFound() {
return <h1>페이지를 찾을 수 없습니다</h1>;
}
오늘 배운 것
| 폴더 | = 주소 한 칸 |
| page.js | 있어야 화면이 된다 |
| [id] | 동적 라우트. params로 들어온다 |
| layout.js | 공통 틀. children에 page가 들어간다 |
| Link | next/link. href로 이동 |
| not-found.js | 404 화면 |
직접 만들어봅시다
/, /about, /blog 세 화면 만들기/blog/[id] 로 글 상세 화면 만들기2강에서는 코드가 어디서 도는지 배웁니다