Layout
1. ์ ์ & ํน์ฑ
2. ์ฝ๋ ์์
3. ๊ด๋ จ ์๋ฌ
์์ธ
1. ์ ์ & ํน์ฑ
Next.js ์๋ Layout ์ปดํฌ๋ํธ๊ฐ ์กด์ฌํ๊ณ ์ด๋ ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ์ ๊ณต์ ๋๋ UI์ ๋๋ค.
Layout ์ปดํฌ๋ํธ๋
- ํ์ผ์์ React ๊ตฌ์ฑ์์๋ฅผ ๋ด๋ณด๋ด๋๋ก ์ ์ํ ์ ์๊ณ ,
- ๋ ๋๋ง ์ค์ ํ์์ ๋ ์ด์์(page UI)๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ, ํ์ ์์๋ฅผ ๋ฐ์์ค๊ธฐ ์ํ children props๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
ใด ์ด๋ฅผ ํ๊ธฐ ์ํด์๋, { children }: { children: ReactNode } ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ ์ด๋ค์ง ์ ์์ต๋๋ค.
{ children }: { children: ReactNode } ์ด ๊ตฌ๋ฌธ์ TypeScript์ ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถํด์ ํ์ ์ ์๋ฅผ ๊ฒฐํฉํ ๊ฒ์ ๋๋ค.
(๋ฐ๋ผ์, ๊ฐ์ฒด์ ํน์ ์์ฑ์ ์ถ์ถํ๋ฉด์ + ์์ฑ์ ํ์ ์ ์ ์ํ ์ ์๊ฒ ํด์ค)
=> ๊ตฌ์กฐ ๋ถํด : ํจ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ๊ฐ์ฒด์์ "children" ์์ฑ์ ์ถ์ถํฉ๋๋ค.
=> ํ์ ์ ์ : "children" ์์ฑ์ Type์ด "ReactNode"์์ ์ ์ํฉ๋๋ค.
2. ์ฝ๋ ์์
# Layout.tsx ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
return (
<section>
{children}
</section>
)
}
# ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ (๋ช
์)
import React, { ReactNode } from 'react';
interface RootLayoutProps {
children: ReactNode;
}
export default function RootLayout({ children }: RootLayoutProps) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}
3. ๊ด๋ จ ์๋ฌ
Layout ์ปดํฌ๋ํธ์ ๋ ์ด์์(page UI)๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ, ํ์ ์์๋ฅผ ๋ฐ์์ค๊ธฐ ์ํ children props๋ฅผ ์์ฑํด ํด๊ฒฐํด์ค๋๋ค.
'๐ป DEV > NextJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NEXT.js] 5. Link ์ปดํฌ๋ํธ ์ฌ์ฉ ์ด์ ( new- link ) (0) | 2024.06.19 |
---|---|
[NEXT.js 14] 4. Font ๋ฐ๊พธ๊ธฐ (0) | 2024.06.17 |
[NEXT.js 14] 3. CSS ์ฌ์ฉ 2๊ฐ์ง ๋ฐฉ๋ฒ (css module ์์ / global.css : tailwind css) (0) | 2024.06.14 |
[NEXT.js 14] 2. loading.js & Suspense & streamed Response (์ธ๋ถํ ๋ก๋ฉ์ํ ๊ด๋ฆฌ) (0) | 2024.06.14 |
[NEXT.js 14] 1. Image ํ๊ทธ ๊ด๋ จ <Image> (0) | 2024.06.11 |
๋๊ธ