์ ๊ทผ (์์ฝ)
ํ์ฌ ๊ฐ๋ฐ์ค์ธ ํ๋ก์ ํธ์์ Next.js 13๋ฒ์ ๊ณผ TypeScript ๋ฅผ ๊ธฐ์ ์คํ์ผ๋ก ๊ฐ๊ณ , ๊ตฌ์ฑ์์๋ง๋ค ์ต๋ํ ์๊ฒ ์ปดํฌ๋ํธํ๋ฅผ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค. (1) ์ปดํฌ๋ํธ(components)๋ฅผ ๋นผ์ฃผ๊ณ , ์ค์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ (2) page.tsx ํ์ผ์์ (1) ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด์๋ (3) ํด๋น ์ปดํฌ๋ํธ ๋ด์ <html> ํ๊ทธ๋ ์์ฑ๊ฐ์ ์ฃผ๋ ๋ฐฉ๋ฒ์ ํ์ตํด๋ณด๊ฒ ์ต๋๋ค.
1. (์ํฉ) ์ปดํฌ๋ํธํ & page.tsx ์์ฑ
(1.1). ์ปดํฌ๋ํธํ + ์ปดํฌ๋ํธ ์ฌ์ฉ์ ์ํ ๋ฑ๋ก
(1.2). Page.tsx ์์ฑ + ์ปดํฌ๋ํธ ๊ฐ์ ธ์ค๊ธฐ
2. ์ปดํฌ๋ํธ์ ์์ฑ ๊ฐ ์ ๋ฌํ๊ธฐ
(2.1). ์ปดํฌ๋ํธ ํ์ผ ์ค๋นํ๊ธฐ (interface, props)
(2.2). page.tsx( ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ) ํ์ผ ์ค๋นํ๊ธฐ
3. ์ปดํฌ๋ํธ์ <HTML> ํ๊ทธ ์ ๋ฌํ๊ธฐ
(3.1). ์ปดํฌ๋ํธ ํ์ผ ์ค๋นํ๊ธฐ (interface, props)
(3.2). page.tsx( ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ) ํ์ผ ์ค๋นํ๊ธฐ
๋ฐฉ๋ฒ
1. (์ํฉ) ์ปดํฌ๋ํธํ & page.tsx ์์ฑ
(1.1). ์ปดํฌ๋ํธํ + ์ปดํฌ๋ํธ ์ฌ์ฉ์ ์ํ ๋ฑ๋ก
- "์ปดํฌ๋ํธ.tsx" ํ์ผ์ ์์ฑํ๊ณ
- ์ด๋ฅผ ์ ์ญ์ ์ผ๋ก export ํด์ฃผ๊ธฐ ์ํด์ ๊ฐ๋ณ์ ์ผ๋ก ๋ง๋ค์ด ๋ index.ts ํ์ผ ๋ฑ์ ๋ฑ๋ก์ ํด์ค๋๋ค.
import ์ปดํฌ๋ํธ๋ช
from './์ปดํฌ๋ํธ๋ช
';
export {
์ปดํฌ๋ํธ๋ช
,
}
(1.2). Page.tsx ์์ฑ + ์ปดํฌ๋ํธ ๊ฐ์ ธ์ค๊ธฐ
'use client';
import React from 'react';
import { ์ปดํฌ๋ํธ๋ช
} from '@/components';
export default function ํ์ด์ง๋ช
() {
return (
<div>
<div className="">
<div>
<์ปดํฌ๋ํธ๋ช
/>
</div>
</div>
</div>
);
}
2. ์ปดํฌ๋ํธ์ ์์ฑ ๊ฐ ์ ๋ฌํ๊ธฐ
(2.1). ์ปดํฌ๋ํธ ํ์ผ ์ค๋นํ๊ธฐ (interface, props)
- ์ปดํฌ๋ํธ์ ์์ฑ์ ์ ๋ฌํ๋ ค๋ฉด ํด๋น ์ปดํฌ๋ํธ์์ props๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ๋ฐ์์ฌ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ ๋ชฉ์ ์์ฑ์ผ๋ก ๋ฐ๋๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํ ์ ์์ต๋๋ค
// ์ปดํฌ๋ํธ๋ช
.tsx
import React from 'react';
interface ์ปดํฌ๋ํธ๋ช
Props {
title: string; // title ์์ฑ์ ๋ฌธ์์ด๋ก ๋ฐ์
}
function ์ปดํฌ๋ํธ๋ช
({ title }: ์ปดํฌ๋ํธ๋ช
Props) {
return (
<div>
<div className="">{title}</div>
</div>
);
}
export default ์ปดํฌ๋ํธ๋ช
;
(2.2). page.tsx( ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ) ํ์ผ ์ค๋นํ๊ธฐ
- ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๋ ์์ฑ title์ ์ ๋ฌํฉ๋๋ค.
// page.tsx
import React from 'react';
import { ์ปดํฌ๋ํธ๋ช
} from '@/components';
export default function Page() {
return (
<div>
<div className="~~~">
<div>
{/* title ์์ฑ์ ์ ๋ฌ */}
<์ปดํฌ๋ํธ๋ช
title="OOOOO" />
</div>
</div>
</div>
);
}
3. ์ปดํฌ๋ํธ์ <HTML> ํ๊ทธ ์ ๋ฌํ๊ธฐ
(3.1). ์ปดํฌ๋ํธ ํ์ผ ์ค๋นํ๊ธฐ (interface, props + children)
// ์ปดํฌ๋ํธ.tsx
'use client';
import React from 'react';
interface ์ปดํฌ๋ํธ๋ช
Props {
children: React.ReactNode; // ์ปดํฌ๋ํธ ๋ด๋ถ์ ์์ ์์๋ฅผ ๋ฐ์
}
function PageTitle({ children }: ์ปดํฌ๋ํธ๋ช
Props) {
return (
<div>
<div className="~~~">{children}</div>
</div>
);
}
export default ์ปดํฌ๋ํธ๋ช
;
(3.2). page.tsx( ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ) ํ์ผ ์ค๋นํ๊ธฐ
'use client';
import React from 'react';
import { ์ปดํฌ๋ํธ๋ช
} from '@/components';
export default function ํ์ด์ง๋ช
() {
return (
<div>
<div className="~~~">
<div>
<์ปดํฌ๋ํธ๋ช
>
โ
1. ๋จ์ํ ๋ฌธ์์ด ์์ฑ ๊ฐ๋ฅ : Page ์
๋๋ค.
โ
2. <a></a>, <p></p> ๋ฑ HTML ํ๊ทธ ์์ฑ ๊ฐ๋ฅ
</์ปดํฌ๋ํธ๋ช
>
</div>
</div>
</div>
);
}
์ด์์ผ๋ก, NextJS ๋ด TailwindCSS ์ฌ์ฉ์ ์ปดํฌ๋ํธ์ HTML ํ๊ทธ ์ถ๊ฐ ๋ฐ ์์ฑ๊ฐ ์ ๋ฌ์ ํ์ตํด๋ดค์ต๋๋ค.
์ถ๊ฐ ์ง๋ฌธ์ ๋๊ธ์ ๋ฌ์์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค^^
์ค๋๋ ํ์ดํ ์ ๋๋ค!
'๐ป DEV > NextJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NEXT.js 14] 2. loading.js & Suspense & streamed Response (์ธ๋ถํ ๋ก๋ฉ์ํ ๊ด๋ฆฌ) (0) | 2024.06.14 |
---|---|
[NEXT.js 14] 1. Image ํ๊ทธ ๊ด๋ จ <Image> (0) | 2024.06.11 |
[Next.js 13] tailwind css Plugin ์์ฑ & ์ ์ฉ (0) | 2023.09.27 |
[Nextjs] ์ด๊ธฐ ์ค์น & ์ธํ (Installation) (0) | 2023.06.01 |
[NextJS] EsLint Delete `โ` eslint (prettier/prettier) ์๋ฌ ํด๊ฒฐํ๊ธฐ (0) | 2023.03.09 |
๋๊ธ