Hello Next.js !
ํ๋ก์ ํธ ์์ฑ
yarn init
yarn add next react react-dom
yarn dev //๋จผ์ ์๋ ๋ฌธ๊ตฌ๋ฅผ ์ถ๊ฐํด์ค์ผ ํฉ๋๋ค.
pakage.json์ ๋ค์ ์ถ๊ฐ
"scripts": {
"dev": "next"
}
pages
pagesํด๋์์ index.js์์ฑ
๋ฐ๋์ next.js๋ pagesํด๋ ์์ ์์ด์ผ๋ง ํฉ๋๋ค.(์ฝ๋์คํ๋ฆฟํ
)
import React from "react"; //์์ด๋ ์์ด๋ ๋ฌด๊ด
export default function index() {
return <div>Hello.next</div>;
}
ํ์ด์ง์ ๋ ์ด์์
page
pages ํด๋์์ ํ์ด์ง๋ฅผ ํ๋์ฉ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
import React from "react";
export default function profile() {
return <div>๋ด ํ๋กํ</div>;
}
import React from "react";
export default function signup() {
return <div>ํ์๊ฐ์
</div>;
}
๊ฐ๋ฐ ์๋ฒti๋ฅผ ๋ค์ ์ผ๋ณด๋ฉด ํ์ผ๋ช
๊ณผ ๋งค์นญ๋์ด์ react-router์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ฝ ํ์ด์ง๋ช
์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ํ์ผ๋ช
์ [profile].js ์ด๋ ๊ฒ ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
Components
๋ฆฌ์กํธ์ ์ฌ์ฉํ๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ ๋ฐ๋ก ํด๋๋ฅผ ๋ง๋ค์ด ๋ง๋ค ์ ์์ต๋๋ค.
์๋์ ๊ฐ์ด ๋ง์ด์ฃ
import React from "react";
export default function AppLayout({ children }) {
return return (
<div>
<h1>๊ณตํต๋ฉ๋ด</h1>
{children}
</div>
);
}
import AppLayout from "../components/AppLayout";
export default function index() {
return <AppLayout>Hello.next</AppLayout>;
}
Link
๋ฌผ๋ก Link ๊ธฐ๋ฅ๋ ๊ฐ์ง๊ณ ์์ต๋๋ค.
import React from "react";
import Link from "next/Link"; //importํด์ฃผ๊ธฐ
export default function AppLayout({ children }) {
return (
<div>
<Link href="/">
<a>Conrad</a>
</Link>
<Link href="/profile">
{/* Linkํ๊ทธ ์์์ href ํด์ค๋ค ๋ด๋ถ์ aํ๊ทธ */}
<a>ํ๋กํ</a>
</Link>
<Link href="/signup">
<a>ํ์๊ฐ์
</a>
</Link>
{children}
</div>
);
}
import React from "react";
import AppLayout from "../components/AppLayout";
export default function index() {
return (
<AppLayout>
<h1>Hello.next</h1>
</AppLayout>
);
}
๊ฐ๋จํ๊ฒ ๋ค๋น๊ฒ์ด์
์ ๋ง๋ค์ ์์ต๋๋ค!
์ฒ์ ๋น๋ํ๋ฉด Link์ด๋์ ๋๋ ์ด๊ฐ ์๋๋ฐ, ์ด๋ ๊ฐ๋ฐ๋ชจ๋์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
production๋ชจ๋๋ก ๋ณํ๋๋ฉด ๋๋ ์ด๊ฐ ์์ด์ง๋ ๊ฑฑ์ ์ํด๋๋ฉ๋๋ค.
esLint
์ด๋ฒ์ esLint๋ฅผ ์ ์ฉ์์ผ๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ์ค์น๋ฅผ ํด์ฃผ์ธ์
yarn add eslint -D
yarn add eslint-plugin-react -D //์ฝ๋์ ๊ฒ์ฉ
yarn add react-hooks -D
๋ค์์๋ .eslintrc ํ์ผ์ ๋ง๋ค์ด์ฃผ์ธ์
{
"parserOption": {
"ecmaVersion": 2020,
"sourceType": "module",
"ecmaFeature": {
"jsx": true
}
},
"env": {
"browser": true,
"node": true,
"es6": true
},
"extends": ["eslint:recommend", "plugin:react/recommend"], //๋๊ทธ๋ฝ๋ค..
"plugins": ["import", "react-hooks"]
}