๐next.js ๊ตฌ์กฐ
next.js์์ url๊ณผ ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ์ถ์ผ๋ฉด app ํด๋ ์์ url์ด๋ฆ๊ณผ ๊ฐ์ ํด๋ ๋ง๋ค๊ณ ๊ทธ ์์ ๋ ์ด์์ ๋ฃ๊ธฐ
ํจ์ ์์ ์๋ {children} -> page.js๊ฐ ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ด๋ค.
ํ์ด์ง๋ณ๊ฒฝ๊ณผ ์๊ด์์ด ๊ณ์ ๋ณด์ฌ์ค ui๋ layout.js์ฐ๋ฉด ํธํ๋ค !!
- html ์ฌ์ด์ for, if ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- map ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ์ key = {์ ๋ํฌํ๊ฐ} ๋ฃ์ผ๋ฉด ์ข์ / ๋๊ฐ์ ์์๋ค์ด ๋ฐ๋ณต๋๋ฉด ๊ตฌ๋ถํ๊ธฐ ํท๊ฐ๋ คํ๋๊น !!
- publicํด๋ ์์ ์๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ ๊ฒฝ๋ก๊ฐ /๋ถํฐ ์์์ด๋ค.
๐img ๋ฃ๋ ๋ฒ
1. img ์ต์ ํ ๋ฐฉ๋ฒ
- lazy loading
- ์ฌ์ด์ฆ ์ต์ ํ
- layout shift ๋ฐฉ์ง : ์ด๋ฏธ์ง ๋๋ฌธ์ ๋ ์ด์์์ด ๋ฐ๋ฆฌ๋ ํ์์ ๋ฐฉ์งํ๋ค.
- ์ต์ ํ๋ ์ด๋ฏธ์ง๋ก ๋ฃ์ ์ ์์
-> ์ด๋ ๊ฒ ํ๊ธฐ ์ํด์๋ ๋ฐ๋ก
import Image from "next/image";
import๋ฅผ ํด์์ผํจ
import tomato from "/public/food0.jpg";
img ๊ฒฝ๋ก ๋ฐ๋ก importํ๊ณ
<Image src={tomato} />
์ด๋ฐ์์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ!!
2. ์ธ๋ถ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ๋๋ ๋ ๋ค๋ฆ package.json์๋ ๋ญ ๋ ์ถ๊ฐํ๋ค๊ณ ํ๋๋ฐ ํ์ํ ๋ ์์๋ณด๊ธฐ
3. importํ์ง ์๊ณ <img src=""> ํตํด ๋ฐ๋ก ๊ฐ์ ธ์ค๊ธฐ
return (
<>
<h3 className="title">์ํ๋ชฉ๋ก</h3>
{์ํ.map( (x , idx)=>{return ( <div className="food" key={idx}>
<img src={'/food' + idx + '.jpg'}/>
<h4>{x} $40</h4>
</div> )})}
</>
);
<img src={'/food' + idx + '.jpg'}/> map ํจ์์์ idx ์ฌ์ฉํ๋ ค๋ฉด { ' ' + ' ' } ์ด ํ์ ์ด์ฉํ๊ธฐ
์๋๋ฉด ๊ฐ๋คํ๊ธฐ ๋ฐฑํฑ + ${} ์ฌ์ฉํ๊ธฐ
<img src={`/food${idx}.jpg`}/>
๐Next.js ์ปดํฌ๋ํธ ์ข ๋ฅ
server component - ๋ํดํธ
html ์์ return () ์ด ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ๋ฃ์ ์ ์๋ค.
ex) <h3 onClick={} > </h3>
์ด๋ฐ์์ผ๋ก onClick={}๊ตฌ๋ฌธ ๊ฐ์ ๊ฒ์ ๋ฃ์ ์ ์๋ค.
useState, useEffect ๊ธฐ๋ฅ๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
use client๋ง ์ฐ๋ฉด ๋ค ์์ ๋กญ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ก๋ฉ ์๋๊ฐ ์์ฒญ ๋น ๋ฅด๋ค. ๊ฒ์์์ง ๋ ธ์ถ ์ ๋ฆฌ
client component - 'use client' ๋ฃ๊ณ ๋ง๋ ๊ฒ์ ์ ๋ถ๋ค client component๊ฐ ๋๋ค!!!
use client๋ง ์ฐ๋ฉด ๋ค ์์ ๋กญ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
client component ๋ก๋ฉ ์๋๊ฐ ๋๋ฆผ , hydration์ด ํ์ํ๋ค.
hydration : html์ ์ ์ ์๊ฒ ๋ณด๋ธ ํ์ ์๋ฐ์คํฌ๋ฆฝ๋ก html์ ๋ค์ ์ฝ๊ณ ๋ถ์ํ๋ ์ผ
ํฐํ์ด์ง๋ server component JS๊ธฐ๋ฅ์ด ํ์ํ ๊ณณ๋ง client component ์ฌ์ฉํ๊ธฐ
ํฐํ์ด์ง๋ server component ๋ฐ๋ก <ClientComponent/>๊ฐ ๊ฐ๋ฅํ๋ค.
๋ค๋ฅธ ํ์ผ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด import๋ฅผ ์ฐ๋ ค๋ฉด ๋ค๋ฅธ ํ์ผ์ export default๊ฐ ์์ด์ผ ํ๋ค.
./ -> ํ์ฌ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํ๋ค.
./../ -> ์์ ํด๋๋ก
export default๋ ํ์ผ๋ง๋ค ํ๋ฒ๋ง ์์ฑํ ์ ์๋ค.
export {age,name} ์ผ๋ก ํ๋ฉด ๋ค ์์ฑ๊ฐ๋ฅํ๋ค. -> ๊ทธ๋ฌ๋ฉด import {age,name}ํ ๋๋ ์ค๊ดํธ๋ฅผ ํ๋ฉด ๋๋ค.
์๋ช ํ๋ฉด ์๋จ
'Frontend > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Next.js - ๊ฐ๋ก ์คํฌ๋กค ๋ฐ ๊ตฌํ (0) | 2023.12.19 |
---|---|
Next.js - modal ์ฐฝ ๋ง๋ค๊ธฐ (0) | 2023.12.19 |
Next.js 14๋ฒ์ - favicon ๋ฐ๊พธ๊ธฐ (1) | 2023.11.10 |
Next.js 14๋ฒ์ - Routing , Rendering, use client (0) | 2023.11.02 |
Next.js ๋? (1) | 2023.10.28 |