๐ค ์ง๋ฌธ: children vs <Outlet /> ์ฐจ์ด๊ฐ ๋ญ๊ฐ์?
๋ ๋ค **โ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ํ์ด์ค๋ค(๋ ๋๋งํ๋ค)โ**๋ ์ ์์๋ ๊ฐ์ง๋ง, **โ๋๊ฐ ๋ด์ฉ์ ๊ฒฐ์ ํ๋๊ฐ?โ**๊ฐ ๋ค๋ฆ ๋๋ค.
1. children (AuthLayout) = โ์ก์โ ๐ผ๏ธ
-
๋ฐฉ์: ์ง์ ๋ผ์ ๋ฃ๊ธฐ (Component Composition)
-
์ฃผ์ฒด: **๋ถ๋ชจ ํ์ด์ง(SigninPage)**๊ฐ ๊ฒฐ์ ํจ.
-
์ค๋ช :
SigninPage์์์<AuthLayout>์ ์ฐ๋ฉด์, ๊ทธ ์ฌ์ด์ ํผ์ ๋ผ์ ๋ฃ์์ฃ ?TypeScript
// SigninPage๊ฐ ์ง์ ๋งํจ: "AuthLayout ์ก์ ์์ ์ด <form>์ ๋ฃ์ด์ค!" <AuthLayout> <form>...</form> </AuthLayout> -
์ฉ๋: ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ๊ป๋ฐ๊ธฐ(๋ชจ๋ฌ, ์นด๋, ๋ ์ด์์ ๋ฑ)๋ฅผ ๋ง๋ค ๋ ์๋๋ค.
2. <Outlet /> (MainLayout) = โ์ฝ์ผํธ/๊ตฌ๋ฉโ ๐
-
๋ฐฉ์: ๋ผ์ฐํ ์ ์ํ ์ฃผ์ (Router Outlet)
-
์ฃผ์ฒด: **URL(์ฃผ์์ฐฝ)**๊ณผ **App.tsx(๋ผ์ฐํฐ)**๊ฐ ๊ฒฐ์ ํจ.
-
์ค๋ช :
MainLayout์ฝ๋๋ฅผ ๋ณด๋ฉด ๊ทธ ์์ ๋ญ๊ฐ ๋ค์ด๊ฐ์ง ์ ํ ๋ชจ๋ฆ ๋๋ค. ๊ทธ๋ฅ ๊ตฌ๋ฉ(Outlet)๋ง ๋ซ๋ ค ์์ฃ .TypeScript
// MainLayout์ ๋ชจ๋ฆ: "๋ ๊ทธ๋ฅ ๊ตฌ๋ฉ๋ง ๋ซ์ด๋์๊ฒ. URL์ ๋ง๋ ์ ๊ฐ ์์ ๊ฝํ๊ฒ ์ง." <div className="content"> <Outlet /> </div>URL์ด
/์ด๋ฉดMainPage๊ฐ ๊ฝํ๊ณ ,/interview๋ฉดInterviewPage๊ฐ ๊ฝํ๋ ์์ ๋๋ค. -
์ฉ๋: ํ์ด์ง ์ ์ฒด์ ๊ตฌ์กฐ(ํค๋, ์ฌ์ด๋๋ฐ ๊ณ ์ )๋ฅผ ์ก๊ณ , ๋ด์ฉ๋ฌผ๋ง ๊ฐ์ ๋ผ์ธ ๋ ์๋๋ค.
์์ฝ:
-
children: ์ฝ๋๋ฅผ ์ง๋ ๋ด๊ฐ โ์ด ์์ ์ด๊ฑฐ ๋ฃ์ด!โ ํ๊ณ ์ง์ ๋ฃ๋ ๊ฒ. -
<Outlet />: URL ์ฃผ์์ ๋ฐ๋ผ ์๋์ผ๋ก ๋ฐ๋๋ ํ๋ฉด์ด ๋ค์ด์ค๋ ๊ตฌ๋ฉ.
์ ๋ง ํต์ฌ์ ์ฐ๋ฅด๋ ์๋ฆฌํ ์ง๋ฌธ์ ๋๋ค! ํ๋ก ํธ์๋ ๋ฉด์ ์์ ๋จ๊ณจ๋ก ๋์ค๋ **โ๋ฆฌ์กํธ ๋ ๋๋ง ์ต์ ํโ**์ ์ง๊ฒฐ๋๋ ๋ด์ฉ์ด๊ฑฐ๋ ์.
๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ๋ฉด, ๋ ๋๋ง ํจ์จ(์ฑ๋ฅ)์ ๋ค๋ฆ
๋๋ค. <Outlet> ๋ฐฉ์์ด ์๋์ ์ผ๋ก ๋ ํจ์จ์ ์
๋๋ค. ์ ์๋์ด ์์ฑํ์ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๋ฐฉ์์ ๋ ๋๋ง ํจ์จ์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์์ฃผ ์ฝ๊ฒ ๋น๊ตํด ๋๋ฆด๊ฒ์.
1. ๐ <Outlet> ๋ฐฉ์ (MainLayout): โ์ฒ ์ ํ ๊ฒฉ๋ฆฌโ (๊ณ ํจ์จ)
MainLayout์ ๋ผ์ฐํฐ๊ฐ ์ต์๋จ์์ ํ ๋ฒ ๋ ๋๋งํด ๋ ์ํ์
๋๋ค.
๋ง์ฝ ์์ผ๋ก ๋ง๋ค InterviewPage ์์์ ์ฌ์ฉ์๊ฐ ๋ต๋ณ์ ๋ง ํ์ดํํ๋ค๊ณ ์์ํด ๋ณด์ธ์. useState์ ๊ฐ์ด ๋ณํ๋๊น ํ๋ฉด์ด ๋ค์ ๊ทธ๋ ค์ ธ์ผ(Re-render) ํ๊ฒ ์ฃ ?
-
๋ ๋๋ง ๋ฒ์:
InterviewPage๋ด๋ถ๋ง ๋ค์ ๊ทธ๋ ค์ง๋๋ค. -
๋ณดํธ๋ฐ๋ ์์ญ: ๋ฐ๊นฅ์ ์๋
MainLayout,Sidebar,Header๋ ์ ํ ํ๊ฒฉ์ ๋ฐ์ง ์์ต๋๋ค. (์ฌ๋ ๋๋ง ์ ๋จ) -
ํจ์จ์ฑ: โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ (์ต์)
-
๊ฒฐ๋ก : ๋ง์ฝ ๋ฉด์ ํ์ด์ง์์ ํ์ดํํ ๋๋ง๋ค ๋ฌด๊ฑฐ์ด ์ฌ์ด๋๋ฐ๋ ํค๋๊น์ง ๋ค์ ๊ทธ๋ ค์ง๋ค๋ฉด ํ๋ฉด์ด ๋ฒ๋ฒ ๊ฑฐ๋ฆด ๊ฒ๋๋ค. ๊ทธ๋์ ๋ฌด๊ฑฐ์ด ๊ธ๋ก๋ฒ ๋ ์ด์์์ ๋ฌด์กฐ๊ฑด
<Outlet>์ ์จ์ผ ํฉ๋๋ค.
2. ๐ผ๏ธ children ๋ฐฉ์ (AuthLayout): โ์ด๋ช
๊ณต๋์ฒดโ (์ ํจ์จ)
๋ฐ๋ฉด, ์ ์๋์ด ์ง์ SigninPage ์ฝ๋๋ฅผ ๋ค์ ๋ ์ฌ๋ ค๋ณด์ธ์. SigninPage ์ปดํฌ๋ํธ ์์์ email๊ณผ password ์ํ(State)๋ฅผ ๊ด๋ฆฌํ๊ณ ์๊ณ , ๊ทธ ์ปดํฌ๋ํธ๊ฐ AuthLayout์ ํธ์ถํด์ ํผ์ ๊ฐ์ธ๊ณ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ด๋ฉ์ผ ์
๋ ฅ์ฐฝ์ a, b, c๋ฅผ ํ์ดํํ ๋๋ง๋ค ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น์?
-
๋ ๋๋ง ๋ฒ์:
SigninPage์ ์ํ๊ฐ ๋ณํ์ผ๋ฏ๋ก,SigninPage์ ์ฒด๊ฐ ๋ค์ ๊ทธ๋ ค์ง๋๋ค. -
ํผํด(?) ์์ญ:
SigninPage๊ฐ ๋ฆฌํดํ๊ณ ์๋AuthLayout๊ป๋ฐ๊ธฐ๊น์ง ๋งค๋ฒ ์๋กญ๊ฒ ๋ค์ ๊ทธ๋ ค์ง๋๋ค. -
ํจ์จ์ฑ: โญ๏ธโญ๏ธ (๋ฎ์)
๐ค โํ, ๊ทธ๋ผ AuthLayout๋ Outlet์ผ๋ก ๋ฐ๊ฟ์ผ ํ๋ ๊ฑฐ ์๋์ผ?โ
์๋๋๋ค! ์ง๊ธ ๊ทธ๋๋ก ๋์๋ ๊ฒ ์ ๋ต์ ๋๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
๊ฐ๋ฒผ์:
AuthLayout์ ๊ธฐ๊ปํด์ผ ๋ฐฐ๊ฒฝ์ ์กฐ๊ธ ์น ํด์ง ๋น ๋ฐ์ค์ ๋ก๊ณ ํ ์คํธ๋ฟ์ ๋๋ค. ๋ฆฌ์กํธ ์ ์ฅ์์ ์ด ์ ๋ ๋ฐ์ค๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฑด 0.0001์ด๋ ์ ๊ฑธ๋ฆฌ๋ ์์ฃผ ๊ฐ๋ฒผ์ด ์์ ์ด๋ผ ์ฑ๋ฅ์ ์๋ฌด๋ฐ ์ง์ฅ์ด ์์ต๋๋ค. -
ํธ๋ ์ด๋์คํ (Trade-off): ์ฑ๋ฅ์ ์์ฃผ ๋ฏธ์ธํ๊ฒ ์ํด ๋ณด๋ ๋์ , **โํ์ด์ง๋ง๋ค ์ ๋ชฉ๊ณผ ๋งํฌ๋ฅผ ๋ง์๋๋ก ๋ฐ๊ฟ ์ ์๋ ์์ฒญ๋ ์ ์ฐ์ฑโ**์ ์ป์์ต๋๋ค. (SignupPage์์๋ โExecute Signupโ์ผ๋ก ์ฝ๊ฒ ๋ฐ๊ฟจ์ฃ ?)
๐จโ๐ป ์ต์ข ์์ฝ (๋ฉด์ ๋ต๋ณ์ฉ)
-
MainLayout (
<Outlet>): ์๋น์ค์ ๋ผ๋์ ๋๋ค. ์ํ ๋ณํ๊ฐ ์ฆ์ ์ฝํ ์ธ (ํ์ด๋จธ, ์ฝ๋ ์๋ํฐ, ์ฑํ ๋ฑ)๊ฐ ๋ ์ด์์ ์ ์ฒด๋ฅผ ๋ฆฌ๋ ๋๋ง ์ํค๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ฑ๋ฅ ์ต์ ํ ๊ด์ ์์ ์ ํํ์ต๋๋ค. -
AuthLayout (
children): ๋ก๊ทธ์ธ/ํ์๊ฐ์ ์ ํ์ด์ง ์์ฒด๊ฐ ๊ฐ๋ณ๊ณ ํ์ดํ ์ธ์ ๋ณต์กํ ์ํ ๋ณํ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฏธ์ธํ ๋ ๋๋ง ์ํด๋ฅผ ๊ฐ์ํ๋๋ผ๋, **์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ฐ์ฑ(Props ์ฃผ์ )**์ ์ป๊ธฐ ์ํด ํฉ์ฑ ํจํด์ ์ ํํ์ต๋๋ค.