๐Ÿ”ฎ[์ข‹.์ฝ”.๋ฌด] Reusable Component๐Ÿ”ฎ

Now.Meยท2022๋…„ 8์›” 10์ผ
1

์ข‹.์ฝ”.๋ฌด

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-thumbnail

์•„๋งˆ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด "Reusable Component"์ด๋ž€ ๋ง์„ ๋“ค์–ด๋ดค์„๊บผ๋ผ ์ƒ๊ฐ๋˜๋Š”๋ฐ. (์™œ๋ƒํ•˜๋ฉด ๋‚˜๋„ ๋“ค์–ด๋ดค์œผ๋‹ˆ๊นŒ)
๊ทธ๋ž˜์„œ Reusable Component๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ์–ด.

๐Ÿ’ŽReusable Component

Reusable์ด๋ž€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋œปํ•˜๋Š”๋ฐ, ๋‹ค์‹œ๋งํ•ด ๋‚ด๊ฐ€ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๊ธฐ์„œ๋„ ์“ฐ๊ณ  ์ €๊ธฐ์„œ๋„ ์“ฐ๊ณ  ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ์“ธ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฑฐ์•ผ.

๐Ÿ’Ž๋”œ๋ ˆ๋งˆ

ํ•œ๋™์•ˆ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ์— ๊ฐ์ด ์•ˆ์™”์—ˆ๋‹ค. ์ฒ˜์Œ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์€ ์ค‘๋ณต๋˜๋Š” html, css ์ฝ”๋“œ๋“ค์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์–ด์„œ ์žฌ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์ง€. ๊ทธ๋Ÿฐ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์–ด๋””๊นŒ์ง€ ๋†’์—ฌ์•ผํ•˜๋Š”์ง€ ๋ชฐ๋ž๋˜๊ฑฐ์•ผ. ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์œผ๋ ค๋ฉด ์‚ฌ์‹ค ๊ทธ๋ƒฅ library์˜ ์ปดํฌ๋„ŒํŠธ์ฒ˜๋Ÿผ ๋งŒ๋“œ๋Š”๊ฒŒ ๋งž์ง€. ์Šคํƒ€์ผ์„ ๋ชจ๋‘ ์ •ํ•ด์ฃผ๊ณ  ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ๋„ ์ •ํ•ด์ฃผ๋Š” ๊ฑฐ์ง€. ๊ทผ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋„ˆ๋ฌด ๋†’์•„๋ฒ„๋ฆฌ๋ฉด ๊ตณ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š”๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์„๊นŒ ์‹ถ์—ˆ์–ด. ๊ฒฐ๊ตญ ๋ฐ˜๋ณต๋˜๋Š” ์—ฌ๋Ÿฌ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์กŒ๊ฑฐ๋“ .

๐Ÿ’Ž์ปดํฌ๋„ŒํŠธ ์•ˆ์ข‹์€ ์˜ˆ (Feat. ๊ณผ๊ฑฐ์˜ ๋‚˜)

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ฒ˜์Œ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ •๋ง ๋‚ด๊ฐ€ ํ•œ ์ฒซ ๊ธฐํš(UI/UX ๊ธฐํš ๋ฐ ๋””์ž์ธ๋„ ๋‚ด๊ฐ€ ํ–ˆ๋‹คใ…œ)์— ๋งž์ถค์œผ๋กœ ๋งŒ๋“ค์—ˆ์–ด. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์ปดํฌ๋„ŒํŠธ๋“ค์ด state๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์—ˆ๊ณ  ์•„์˜ˆ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋‹ด๊ธด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ๋„ ํ–ˆ์ง€. (์™€์šฐ, ์ตœ์•…์ด์—ˆ๋„ค)
์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋ชจ๋“  ์•„ํŒŒํŠธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ ๊ฑฐ์ง€. ๊ทธ๋Ÿผ ์•„ํŒŒํŠธ ๋ฆฌ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ ์ฝœ๋„ ํ•˜๊ณ  ์ฝœํ•˜๋Š”๋™์•ˆ ๋กœ๋”ฉ์ค‘์ด๋ฉด ์Šค์ผˆ๋ ˆํ†ค ui๋„ ๋ณด์—ฌ์ฃผ๊ณ  ๊ทธ๋Ÿฌ๋‹ค ๋กœ๋”ฉ์ด ๋๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์‹์ด์—ˆ๋˜ ๊ฑฐ์•ผ.
์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋‹ค๋ณด๋‹ˆ ๋น„์Šทํ•œ UI๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ํ•˜๋Š” ์ผ์ด ๋‹ฌ๋ผ์„œ ์ƒˆ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ๊ณ  ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์— ์ฝ”๋“œ์— ์ฝ”๋“œ๋ฅผ ๋”ํ•ด์•ผ ํ• ๋•Œ๋„ ์žˆ์—ˆ์–ด. ๋กœ์ง๊ณผ UI๊ฐ€ ๋‚˜๋ˆ ์ง€์ง€ ์•Š์•„์„œ ๋‚ด ์ฝ”๋“œ๋ฐญ์„ ๋’ค์ ธ๊ฐ€๋ฉฐ ์ฐพ์•„์•ผํ•  ๋•Œ๋„ ์žˆ์—ˆ์–ด.
๋‚ด๊ฐ€ 100ํผ์„ผํŠธ ์ง  ์ฝ”๋“œ์ธ๋ฐ "์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ญํ•˜๋Š” ์• ์˜€์ง€?", "์ด๊ฑด ๋ฌด์Šจ ๋ฐ์ดํ„ฐ์ง€?" ๋“ฑ ๊ผญ ๋‚จ์˜ ์ฝ”๋“œ ๋ณด๋“ฏ์ด ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด ๋‚˜๊ฐ”์ง€.

๐Ÿ’Ž์ปดํฌ๋„ŒํŠธ ๊ฐœ์„ 

์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•œ์ง€ ์–ด์–ธ 4๊ฐœ์›”. ์–ด๋Š์ •๋„ UI๊ฐ€ ์™„์„ฑ๋˜๊ณ  ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ์ข‹์€ ์ฝ”๋“œ์˜ ๊ธฐ์ค€์ด ์žกํ˜€๊ฐ„ ์‹œ์ ์— ๋‚œ ๋Š๊ปด๋ฒ„๋ ธ์–ด. ์ง€๊ธˆ์ด ์•„๋‹ˆ๋ฉด ์ด ํ˜ผ๋ˆ์˜ ์นด์˜ค์Šค์ธ ๋‚ด ์ฝ”๋“œ๋“ค์„ ์ •๋ฆฌํ•  ๊ธฐํšŒ๊ฐ€ ์—†๊ฒ ๋‹ค ์‹ถ์—ˆ์ง€. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ๋‹ค ๋œฏ์–ด๊ณ ์น˜๊ธฐ๋กœ ๋งˆ์Œ๋จน์—ˆ๋‹ค. ์‚ฌ์‹ค ์ปดํฌ๋„ŒํŠธ ๋ง๊ณ ๋„ ์ „๋ถ€ ๋‹ค ์ •๋ฆฌํ•ด์•ผ ํ–ˆ๊ฑฐ๋“ . interface๋„ ์—ฌ๊ธฐ์ €๊ธฐ ํฉ์–ด์ ธ์žˆ๊ณ  ๋ฐ์ดํ„ฐ fetchingํ•˜๋Š” ๊ฒƒ๋„ ์—ฌ๊ธฐ์ €๊ธฐ ํฉ์–ด์ ธ์žˆ์—ˆ๊ฑฐ๋“ . ๊ฑฐ์˜ ์‚ฌํ˜ผ์˜ ๊ตฌ์Šฌ ์กฐ๊ฐ ๋ชจ์œผ๋Š” ๋Š๋‚Œ.

์ฝ”๋“œ๋“ค์„ ๋œฏ์–ด๊ณ ์น˜๊ธฐ ์ „, ์ผ๋‹จ ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ์ค€์„ ์„ธ์› ์–ด.

  • ์ปดํฌ๋„ŒํŠธ๋Š” UI๋งŒ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ state๋‚˜ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋„๋ก ํ•˜์ž.
  • ๊ฐ€๋Šฅํ•œํ•œ, ๋ชจ๋“ ๊ฒƒ์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค ๋˜, ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ๊ธฐ์ค€์€ ์ปดํฌ๋„ŒํŠธ์˜ ์ •์˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€์ง€.
๋‘๋ฒˆ์งธ๋Š” Layout๊นŒ์ง€๋„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋Š” ์˜๋„์•ผ. ๋‚ด๊ฐ€ ํ•˜๊ณ ์‹ถ์—ˆ๋˜๊ฑฐ๋Š” (์ปจํ…Œ์ด๋„ˆ์ปดํฌ๋„ŒํŠธ)X(๋ ˆ์ด์•„์›ƒ์ปดํฌ๋„ŒํŠธ)X(๊ธฐ๋ณธ์ปดํฌ๋„ŒํŠธ)์˜€๊ฑฐ๋“ . ์˜ˆ๋ฅผ ๋“ค์–ด

์œ„์˜ ๊ทธ๋ฆผ์„ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์นด๋“œ์™ธํ˜•์„ ๋งก๊ณ  ์žˆ๋Š” ํฐ์ƒ‰ ๋‘ฅ๊ทผ ๋ถ€๋ถ„์ด ์ปจํ…Œ์ด๋„ˆ์ปดํฌ๋„ŒํŠธ์ด๊ณ  1, 2, 3, 4๊ฐ€ ์„ธ๋กœ ํ•œ์ค„๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๋ ˆ์ด์•„์›ƒ์ด ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ์ธ๊ฑฐ๊ณ  1,2,3,4๊ฐ€ ๊ธฐ๋ณธ์ปดํฌ๋„ŒํŠธ์ธ๊ฑฐ์ง€.
์ด๋ ‡๊ฒŒ ๊ธฐ์ค€์„ ์„ธ์šฐ๊ณ  ๋‚˜๋‹ˆ Reusable Component๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐ์ด ์˜ค๋”๋ผ๊ณ .
๊ณตํ†ต๋˜์–ด์•ผ ํ•  ์Šคํƒ€์ผ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๋ณ€ํ™”ํ•  ์Šคํƒ€์ผ์€ ์ธ์ž๋กœ ๋ฐ›๋Š”๊ฑฐ์ง€.

๊ทธ๋ฆฌ๊ณ  Next.js๋‚˜ React์—์„œ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๊ฐ’์„ ๋ฐ›์•„์•ผ ํ•˜๊ฑฐ๋“ . ๊ทผ๋ฐ ๋งŒ์•ฝ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์ด๋ ‡๊ฒŒ ๋Ž์Šค๊ฐ€ ๋งŽ์•„์งˆ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ฆฌ๊ณ  ๋‚ด๋ฆฌ๊ณ  ๋‚ด๋ฆฌ๋Š”๊ฒŒ ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด์ž–์•„.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์ปดํฌ๋„ŒํŠธ์™€ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆด์–ด.
์ปจํ…Œ์ด๋„ˆ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ๋ฅผ children์„ prop์œผ๋กœ ๋ฐ›๋Š”๊ฑฐ์ง€. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๋‚ด๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ๊ทธ ์•ˆ์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ pages ๋‹จ์—์„œ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์„œ ์ค„ ์ˆ˜ ์žˆ์ง€.

๐Ÿ’Žํ•œ๋ฒˆ ๋”!! ๊ฐœ์„ 

๐ŸŽฏ์ „์—ญ ๋ณ€์ˆ˜ ๋ฐ Function ์‚ฌ์šฉ

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๊ฐ€ ์ •ํ•œ ๋ฉ”์ธ color๊ฐ€ "indigo-500"์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„๋•Œ, ๋ชจ๋“  theme์ด๋ผ๋Š” ์ƒ‰์„ ์“ฐ๋Š” ์ปดํฌ๋„ŒํŠธ์— indigo-500์„ ์ ๋Š”๊ฒƒ๋ณด๋‹ค๋Š” const themeColor = "indigo-500"์ด๋ผ๊ณ  ์“ฐ๊ณ  themeColor๋ฅผ ๊ฐ€์ ธ์™€์„œ ์“ฐ๋Š”๊ฒŒ ๊ณ ๋ฏผ ์•ˆํ•ด๋„๋˜๊ณ  ํŽธ๋ฆฌํ•˜๊ณ  ์ข‹์ž–์•„? ์ƒ‰์„ ๋ฐ”๊ฟ€๋•Œ์—๋„ themeColor์˜ ๊ฐ’๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ํ•œ๋ฒˆ์— ๋ฐ”๋€Œ๋‹ˆ๊นŒ ์œ ์ง€๋ณด์ˆ˜์—๋„ ์ข‹์„๊บผ๊ณ . function๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ๊บผ์ง€.
๊ทธ๋ž˜์„œ ๋‚˜๋Š” Recoil์„ ์“ฐ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์–ด. ์ผ๋‹จ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ธฐ๋•Œ๋ฌธ์ด์•ผ. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ถ”ํ›„์— ๋‚ด๊ฐ€ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ๋‹ค์‹œ ์—…๋กœ๋“œํ• ๊ป˜.

๐ŸŽฏ์ปดํฌ๋„ŒํŠธ์˜ ์ปดํฌ๋„ŒํŠธ

์ด ๊ฐœ๋…์€ ์•„์ง ์™„์„ฑ๋œ ๊ฐœ๋…์€ ์•„๋‹ˆ๊ณ  ์กฐ๊ธˆ ๋” ๊ณต๋ถ€๋„ ํ•„์š”ํ•œ ๊ฐœ๋…์ธ๋ฐ, ๋‚ด๊ฐ€ ์ด ๊ฐœ๋…์„ ๊ณ ๋ฏผํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„.

  • ํŠน์ • ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ํŠน์ • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŠน์ •ํ•œ ์ผ์ •ํ•œ ์Šคํƒ€์ผ์„ ๊ฐ€์ง€๊ณ  ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋ฒ„ํŠผ์ด๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ๋ฒ„ํŠผ์€ ์ž‘์€์‚ฌ์ด์ฆˆ, ์ค‘๊ฐ„ ์‚ฌ์ด์ฆˆ, ํฐ ์‚ฌ์ด์ฆˆ ์„ธ๊ฐ€์ง€๋ฅผ prop์œผ๋กœ ๋ฐ›์•„. ๊ทผ๋ฐ ๋ฆฌ์ŠคํŠธ ์นด๋“œ๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ ์นด๋“œ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ ์นด๋“œ๋Š” ํ•ญ์ƒ ์ž‘์€ ์‚ฌ์ด์ฆˆ์˜ ๋ฒ„ํŠผ์ด ๋“ค์–ด๊ฐ€. ๋ฒ„ํŠผ์ด ์•ˆ๋“ค์–ด๊ฐˆ ๋•Œ๋„ ์žˆ๊ณ . ๊ทธ๋Ÿด๊ฒฝ์šฐ class์ฒ˜๋Ÿผ ๋‹ค์Œ ๋ฐฉ์‹์ฒ˜๋Ÿผ ์“ฐ๊ณ  ์‹ถ์€๊ฑฐ์ง€.

<Card>
  <Card.Layout type="์„ธ๋กœ">
	<Card.Button onClick={doSomething}>
  		ํด๋ฆญํ•ด์ฃผ์„ธ์šฉ
	</Card.Button>
  </Card.Layout>
</Card>

๋‹น์—ฐํžˆ Card ์•ˆ์—๋Š” ๊ทธ๋ƒฅ ์ผ๋ฐ˜ Layout์ด๋‚˜ Button์ปดํฌ๋„ŒํŠธ๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€. ํ•˜์ง€๋งŒ ๊ทธ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์“ฐ๋‹ค๋ณด๋ฉด ๋””์ž์ธ ํ†ต์ผ์„ฑ๋„ ์ ์–ด์งˆ ๊ฑฐ์ž–์•„?
์–ด๋–ป๊ฒŒ ๋ณด๋ฉด default ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€๊ฑฐ์ง€.
(+Headless UI๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™๋”๋ผ๊ตฌ. ๊ทธ๋ž˜์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—ด์–ด๋ณด๋Š” ์ค‘์ด์•ผ.)
์ด ๊ฐœ๋…๋„ ์™„์„ฑ๋˜๋ฉด ์ถ”ํ›„ ์—…๋ฐ์ดํŠธ ํ• ๊ป˜. ์—…๋ฐ์ดํŠธ ํ–ˆ๋œจ์•„!!
+๋‚ด์šฉ์ถ”๊ฐ€
์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๋”๋ผ๊ณ !
์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ Card ์ „์šฉ Button์ด ํ•„์š”ํ•  ๋•Œ๋Š” Card ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ๋กœ ๊ฐ€์„œ ์ผ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋“ฏ์ด ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋˜๋”๋ผ๊ณ . ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์— Card.Button ํ•œ์ค„์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ์œ„์˜ ์˜ˆ์ฒ˜๋Ÿผ Card.Button์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ๊ฑฐ์ง€.

//Card.tsx
interface CardProps {
	children: React.ReactNode;
}
export default Card({
  children,
}: CardProps) {
  return (
    	<div>
    		{children}
    	</div>
    )
}

interface ButtonForCardProps {
    clickEvent?: () => void;
    children: React.ReactNode;
}
function ButtonForCard({
    clickEvent,
    children
}: ButtonProps) {
    return (
        <button onClick={clickEvent}>
            {children}
        </button>
    )
}

Card.Button = ButtonForCard;

์—ฌ๊ธฐ์—์„œ ์ค‘์š”ํ•œ ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„.

  • export๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ(Card)๋งŒ importํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ์•„๋ž˜์˜ ๋ชจ๋“  Component๋Š” ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด.
  • ๋Œ€์‹  Card ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด. Card ๋ฐ–์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š”๊ฑฐ์ง€

์œ„์—์„œ export๋ฅผ ๋”ฐ๋กœ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋งŒ importํ•ด๋„ ๊ทธ ์•„๋ž˜์˜ ๋ชจ๋“  component๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€.
ํ•˜์ง€๋งŒ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŽ์•„์ง€๋ฉด ๋‹น์—ฐํžˆ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋“ค๋„ ๊ฐ™์ด import ํ•ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์•„.

๐Ÿ’ก๊ฒฐ๋ก 

  • ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์ปดํฌ๋„ŒํŠธ๋Š” UI์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ”๋„๋ก ํ•œ๋‹ค.
  • ์žฌ์ƒ์šฉ์„ฑ์ด ๋†’์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์„์ˆ˜๋ก ์ž์œ ๋„๊ฐ€ ๋†’์•„์ ธ ๋ธŒ๋žœ๋“œ ํ†ต์ผ์„ฑ์ด ๋‚ฎ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๋ณด์•ˆํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค.
profile
Hi :) Future me

0๊ฐœ์˜ ๋Œ“๊ธ€