[NEXT.js 14] 5. Layout(feat. { children }: { children: ReactNode }) props
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๋ฅผ ์์ฑํด ํด๊ฒฐํด์ค๋๋ค.