-
Notifications
You must be signed in to change notification settings - Fork 1
NextJS
https://brunch.co.kr/@hee072794/81
-
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ ์ฌ์ด๋์์ ๋ ๋๋ง์ ํ๋ค.
-
๋ ๋น ๋ฅด๊ฒ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด ์ฝ๋ ์คํ๋ฆฟํ ์ ์งํํ๋ค.
(์ฝ๋ ์คํ๋ฆฟํ : ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ก๋ ํ์ง ์๊ณ , ํ์ํ ๋ถ๋ถ๋ง ๋ก๋)
-
๊ฐ๋จํ ๋ผ์ฐํ ์ ์ ๊ณตํ๋ค. (pages)
-
HMR(Hot Module Replacement)์ ์ง์ํ๋ WebPack ๊ธฐ๋ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
mkdir hello-next
cd hello-next
npm init -y
npm install react react-dom next
mkdir pages
โ
โ
๋ชจ๋ ๋ผ์ฐํฐ๋ค์ ๊ณ ์ ๋ค์ด๋ฐ์ธ pages ์์ ๋ค์ด๊ฐ์ผ next๊ฐ ์ธ์งํด์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
npm run dev
const Index = () => {
return (
<div>
<p>Hello Next.js</p>
</div>
)}
export default Index
import Link from 'next/link'
์ฝ๋๋ฅผ ํตํด์ Link Tag ์์ฑ ๊ฐ๋ฅ (pages/about.js ์์ฑ ํ)
<Link href="/about">
<a>About Page</>
</Link>
์์ ๊ฐ์ ์ฝ๋๋ก ๋งํฌ๋ฅผ ์ค์ ํ ํ, Anchor, Button ํ๊ทธ ๋ฑ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ!
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํ์คํ ๋ฆฌ๋ฅผ ์ง์ํ๋ฏ๋ก, ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅผ ์, Index ํ์ด์ง๋ก ์ด๋
import Header from './Header'
const Layout = (props) => (
<div>
<Header/>
{props.children}
</div>
)
export default Layout
์์ ๊ฐ์ ์ฝ๋์์ ์๋์ ๊ฐ์ด ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
import Layout from '../components/MyLayout.js
export default () => (
<Layout>
<p>Hello Next.js</p>
</Layout>
)
** ๋ง์ฝ ์์ props.children์ ์ญ์ ํ๋ฉด, Layout ์๋ฆฌ๋จผํธ ํ์์ ์๋ pํ๊ทธ ๋ฑ์ ๋ ๋๋ง ํ์ง ๋ชปํ๋ค. **
<Link href={'/post?title=${props.title}'}>
<a>{props.title}</a>
</Link>
props๋ก ์ ๋ฌ๋, ํ์ดํ์ ๊ฐ์ง๊ณ ์ฟผ๋ฆฌ ๋ฌธ์์ด๋ก URL์ด ์์ฑ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ์๋ก๊ณ ์นจ์ ํ๋ฉด ํ์ด์ง ์์ฒด .jsํ์ผ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ 400 Err ์ฝ๋๊ฐ ๋ฐ์ํ๋ค!
์ฟผ๋ฆฌ ๋ฌธ์์ด ์์ฒด๋ก๋ ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ ์ด๋ ค์ด ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์, ์๋์ as๋ฅผ ์ฌ์ฉํ๋ค.
as props๋ฅผ ์ฌ์ฉํ๋ฉด, ํด๋ผ์ด์ธํธ ํ์คํ ๋ฆฌ์์ ์ฆ, ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ ํ ์์ผ๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋, ํ์คํ ๋ฆฌ๋ฅผ ๊ธฐ์ตํ๋๋ก ํ๋ค.
- ํํ ๋ฆฌ์ผ 5ํธ ์ฐธ์กฐ
์์ 400 Err ์ฝ๋๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก Next.js ์ปค์คํ ์๋ฒ API๊ฐ ์กด์ฌํ๋ค. ์ฌ๊ธฐ์๋ ํ ์คํธ Express(Node.js) ์ฌ์ฉ https://brunch.co.kr/@hee072794/87
=====================================================================================================================
SSR์ ์๋ฒ์์ ํ์ด์ง๋ง๋ค HTML์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ๋๋๊ธฐ ์ ์ ๋ฐ๋ก ์ฌ์ฉ์๋ค์๊ฒ ํ๋ฉด์ ๋ณด๋ด์ค์ ์ฌ์ดํธ์ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ค. ๊ทธ๋ฐ๋ฐ CSS-in-JS๋ฅผ ์ฌ์ฉํ ๋ชจ๋ ์คํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ CSS๊ฐ staticํ๊ฒ ์ถ๊ฐ๋๋ ๊ฒ์ด ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํด dynamicํ๊ฒ ์ถ๊ฐ๋๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋ฉ์ ๋๋ด๊ธฐ ์ ์ ์คํ์ผ์ด ์ ์ฉ๋์ง ์์ HTML์ด ๋ ๋๋ง ๋๋ ๊ฒ์ด ๋ฌธ์ ์๋ค.
Next.js๋ ๋ ๋๋ง์ด ๋ ๋ pages ๋๋ ํ ๋ฆฌ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ด ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ๊ฐ ์๋ค. ์ด ์ปดํฌ๋ํธ๋ฅผ ์ปค์คํฐ ๋ง์ด์งํ์ฌ ์์์ ์ธ๊ธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
Next.js์์ styled-components ๊ฐ์ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ SSR์ ์ง์ํ๊ธฐ ์ํด์๋ , ํ๊ทธ๋ฅผ ๋ณด๊ฐํ ์ ์๋ ์ปค์คํ ๋ฅผ ์ฌ์ฉํ์ฌ HTML ๊ตฌ์กฐ๋ฅผ ํ์ฅํด์ผ ํ๋ค. ์ปค์คํ ๋ Next.js์ /pages์ _document.js ํ์ผ์ ๋ง๋ค์ด ์ ์ํ ์ ์๋๋ฐ, _document.js๋ HTML ๋ฌธ์๋ก ์ปค์คํ Document๋ฅผ ๋ง๋ค ๋๋ง ์์ฑ์ด ํ์ํ๋ฉฐ ์๋ต๋ ๊ฒฝ์ฐ Next.js๊ฐ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ค.
์๋ ์ฝ๋ ์ฐธ์กฐ Next.js with Styled-component
=====================================================================================================================
๋ชจ๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ Next.js์์ getInitialProps๋ผ๋ ๋ฉ์๋๋ฅผ ์ค์ ํด์ ํด๊ฒฐํด์ผ ํ๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ํ ๋ชจ๋ ์ปดํฌ๋ํธ์๊ฒ props๋ก ์ฌ์ ์ผ๋ก ์ ๋ฌํ๊ธฐ ๋๋ฌธ์, ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง ๊ฐ๋ฅํ๊ฒ ํ๋ค.