React는 [라이브러리] 이다!
- 리액트는 UI에 집중한 '라이브러리'이고,
- 프레임워크는 하나에 초점을 맞추지 않고 여러가지를 다룸
- 파일 구성 및 코드 작성 방법과 명확한 규칙이 정해져 있음.
/pages
라는 폴더의 파일을 추가하여 라우팅 가능.
/pages
로 작성해야 함!추가 코드를 쓸 필요가 없어지고, 작업량을 줄일 수 있게 됨.
중첩 라우팅, 동적 라우팅 등의 추가적인 기능도 기본으로 지원함.
$ npx create-next-app
index.html
파일이 존재하는데,index.html
파일이 존재하지 않음.[참고] Next 버전 업에 따른 폴더 구조 변경
- 기존 폴더 구조와 변경되어 /pages 나 /style 등이 생성되지 않음.
- 위 명령을 통해 보일러플레이트를 생성할 때, 모든 옵션에 No를 체크하면 된다!
_app.js
제외하고 전부 삭제.위 방식처럼 /pages 폴더에 직접 파일을 생성해도 됨.
그 외에도 중첩 라우팅 기능을 제공함.
예>
/news
와 /news/about
에 해당하는 라우팅을 설정하고 싶다면?/news
폴더를 생성한 후, index.js
와 about.js
파일을 생성하면 된다.params
가 포함된 동적 라우팅이 필요한 경우[]
)를 넣어주고, 변수명을 입력하면 된다!next/router
의 useRouter
Hook을 사용한다.import { useRouter } from 'next/router';
const DetailPage = () => {
const router = useRouter();
return <h1>Detail Page - {router.query.newsId}</h1>;
};
export default DetailPage;
useRouter
- useRouter이 리턴하는 router 객체의 구조를 살펴보면 다음과 같다.
{ "pathname": "/news/[newsId]", "route": "/news/[newsId]", "query": { "newsId": "1234567" }, "asPath": "/news/1234567", "components": { "/news/[newsId]": { "initial": true, "props": { "pageProps": {} } }, "/_app": { "styleSheets": [] } }, "isFallback": false, "basePath": "", "isReady": true, "isPreview": false, "isLocaleDomain": false, "events": {} }
/thisisyjin/12345
에서 router 객체는 다음과 같다.{
"pathname": "/[userName]/[postName]",
"route": "/[userName]/[postName]",
"query": {
"userName": "thisisyjin",
"postName": "1234"
},
"asPath": "/thisisyjin/1234",
"components": {
"/[userName]/[postName]": {
"initial": true,
"props": {
"pageProps": {}
}
},
"/_app": {
"styleSheets": []
}
},
"isFallback": false,
"basePath": "",
"isReady": true,
"isPreview": false,
"isLocaleDomain": false,
"events": {}
}
Link
import { Link } from 'next/link';
const Homepage = () => {
return (
<Link href="/">Home</Link>
<Link href="/about">About</Link>
<Link href="/post/${encodeURIComponent(postId)}">My Post</Link>'
<!-- alternative -->
<Link href={{
pathname: 'post/[postId]',
query: { postId: postId }
}}
>
My Post
</Link>
)
}
- Dynamic Routing의 경우에는, 두 가지 방법을 통해 링크 가능.
1. string literal 이용 (`encodeURIComponent()`)
2. URL object 이용
``` jsx
<Link href={{
pathname: '/about/[id]',
query: { id: post.id }
}}
>
Link Page
</Link>
주의 - React Router의
Link
와 다름.
- Link to='/path'와 다르게
- Link href="/path"로 작성해주어야 함.