[React] Custom Component

Yuhalloยท2023๋…„ 2์›” 20์ผ
1

React

๋ชฉ๋ก ๋ณด๊ธฐ
2/2

๐Ÿงก Custom Component

๐Ÿ” Custom Component ๋ž€?
React์—์„œ Custom component๋ž€, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณดํ†ต JSX๋กœ ์ž‘์„ฑ๋˜๋ฉฐ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’š Component Driven Development

๐Ÿ” CDD ๋ž€?
Component Driven Development ์˜ ์•ฝ์ž๋กœ, ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” UI๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ๊ฐœ๋ฐœํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธํ•˜๊ณ , ์ด๋“ค์„ ๋‹ค์‹œ ์กฐํ•ฉํ•˜์—ฌ ํฐ ํ™”๋ฉด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
CDD๋Š” React์™€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์ ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ๋” ๋‚˜์€ ํ’ˆ์งˆ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ€ CDD์˜ ์žฅ์ 

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

CSS in JS

๐Ÿ” CSS in JS ๋ž€?
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์•ˆ์—์„œ CSS๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํƒ€์ผ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋œ ์Šคํƒ€์ผ ๊ฐ์ฒด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. React์—์„œ๋Š” styled-components, Emotion ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽ€ CSS in JS ์˜ ์žฅ์ 

  • ์Šคํƒ€์ผ๊ณผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฒฐํ•ฉํ•˜์—ฌ ์žˆ์–ด์„œ, ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  • CSS ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์™€ ์Šคํƒ€์ผ ์ฝ”๋“œ๊ฐ€ ํ•จ๊ป˜ ์œ ์ง€๋ณด์ˆ˜๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง์ด ์‰ฝ๊ณ , CSS Prepocessor์˜ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ƒ์‚ฐ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๋‚˜ ๋ณต์žก๋„๊ฐ€ ์ ์  ์ปค์ง€๊ณ , ํŒ€ ๊ตฌ์„ฑ์›์˜ ์ˆ˜๋„ ๋งŽ์•„์ง์— ๋”ฐ๋ผ CSS๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์ผ๊ด€๋œ ํŒจํ„ด์ด ํ•„์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CSS ์ „์ฒ˜๋ฆฌ๊ธฐ(CSS Preprocessor)๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. CSS๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋„์›€์„ ์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ” CSS Preprocessor ์ด๋ž€?
CSS๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ, CSS์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. CSS Preprocessor ์—์„œ๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋ฏน์Šค์ธ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด CSS ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ , ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์—ฌ ํšจ์œจ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์˜ ์ฝ”๋“œ ์Šคํƒ€์ผ ์ฐจ์ด๋‚˜ ํŒ€์—์„œ์˜ ํ‘œ์ค€ํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ, CSS์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , ์ƒˆ ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋Šฅ์„ ๋ฐฐ์›Œ์•„ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CSS Preprocessor์€ ์ƒ์‚ฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ์ด์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๊ฐœ๋ฐ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CSS ์ „์ฒ˜๋ฆฌ๊ธฐ ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์— ๋งž๋Š” Compiler๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ , ์ปดํŒŒ์ผ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” CSS ๋ฌธ์„œ๋กœ ๋ณ€ํ™˜์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด CSS ํŒŒ์ผ๋“ค์„ ์ž˜ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , CSS ํŒŒ์ผ์„ ์ž‘๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

SASS(Syntactically Awesome Style Sheets)

๊ฐ€์žฅ ์œ ๋ช…ํ•œ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ๋กœ, CSS๋ฅผ ํ™•์žฅํ•ด ์ฃผ๋Š” ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์ฒ˜๋Ÿผ ํŠน์ • ์†์„ฑ์˜ ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜์—ฌ ํ•„์š”ํ•œ ๊ณณ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์˜ ์„ ์–ธ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค.

SASS๋Š” SCSS ์ฝ”๋“œ๋ฅผ ์ฝ์–ด ์ „์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ ์ปดํŒŒ์ผํ•ด์„œ ์ „์—ญ CSS ๋ฒˆ๋“ค ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ CSS์˜ ๊ตฌ์กฐํ™”๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๋Œ€์‹  ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์˜์ง€ํ•˜๊ณ  CSS ์šฉ๋Ÿ‰์ด ์ปค์ง€๋Š” ๋‹จ์ ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

๐ŸŽ€ SASS

  • Sassy CSS์˜ ์•ฝ์ž๋กœ, CSS๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ CSS๋ฌธ๋ฒ•๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ, ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ์ค‘์ฒฉ ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ CSS ํ™•์žฅ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • $primary-color๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด, ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์˜ ์ƒ‰์ƒ์„ ์ผ๊ด„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, SCSS์ฝ”๋“œ๋ฅผ CSS๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CSS์™€ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค์ด ์‰ฝ๊ฒŒ ์ ์‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๐ŸŽ€ ์ปดํŒŒ์ผ(Compile)
์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์„œ ํ•ด๋‹น ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ๋ถ„์„ํ•˜๊ณ , ๊ธฐ๊ณ„์–ด๋‚˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ์€ ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ํ–ฅ์ƒํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ์˜ ๊ฒฐ๊ณผ๋ฌผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BEM(Block, Element, Modifier)

SASS๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด BEM, OOCSS, SAMCSS ๊ฐ™์€ ๋ฐฉ๋ฒ•๋ก ์ด ๋Œ€๋‘๋˜์—ˆ๊ณ  ๊ฐ ์žฅ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ๋ชจ๋“  ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ, ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐํ™”(์œ ์ง€ ๋ณด์ˆ˜ ์šฉ์ด), ์ฝ”๋“œ์˜ ํ™•์žฅ์„ฑ, ์ฝ”๋“œ์˜ ์˜ˆ์ธก์„ฑ์„ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ CSS ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ BEM์ด ์žˆ์Šต๋‹ˆ๋‹ค. Block, Element, Modifier๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํด๋ž˜์Šค ๋ช…์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ๊ฐ -, _๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๋ช…์€ BEM ๋ฐฉ์‹์˜ ์ด๋ฆ„์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ๋” ์ผ๊ด€๋œ ์ฝ”๋”ฉ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋„ ๋ฌธ์ œ์ ์€ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๋ช… ์„ ํƒ์ž๊ฐ€ ์žฅํ™ฉํ•ด์ง€๊ณ  ๊ธด ํด๋ž˜์Šค ๋ช… ๋•Œ๋ฌธ์— ๋งˆํฌ์—…์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง€๊ณ , ์žฌ์‚ฌ์šฉ ์‹œ ๋ชจ๋“  UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ SASS์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง„์ •ํ•œ ์บก์Šํ™” ๊ฐœ๋…์ด ์—†์–ด์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์œ ์ผํ•œ ํด๋ž˜์Šค ๋ช…์„ ์„ ํƒํ•˜๋Š”๋ฐ ์˜์กดํ–ˆ์Šต๋‹ˆ๋‹ค.

CSS in JS

์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๊ฐœ๋ฐœ์€ ์บก์Šํ™”์˜ ์ค‘์š”์„ฑ์„ ๋ถˆ๋Ÿฌ์™”๊ณ , CSS๋„ ์ปดํฌ๋„ŒํŠธ ์˜์—ญ์œผ๋กœ ๋ถˆ๋Ÿฌ๋“ค์ด๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Styled-Component๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Styled-Compnent๋Š” ๊ธฐ๋Šฅ์  ํ˜น์€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋“ค๋กœ๋ถ€ํ„ฐ UI๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ๋‹จ์ˆœํ•œ ํŒจํ„ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽ€ CSS in JS ์˜ ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„
์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ์กด์˜ ์™ธ๋ถ€ CSS ํŒŒ์ผ๊ณผ ๋น„๊ตํ•ด ๋‹ค์†Œ ๋ฌด๊ฑฐ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. CSS ์ฝ”๋“œ๊ฐ€ ์ ์„ ๊ฒฝ์šฐ CSS in JS๋ฅผ ์‚ฌ์šฉํ•ด ๊ทธ ์ฝ”๋“œ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ฝ”๋“œ๋งŒ ๋กœ๋“œ๋˜๋ฏ€๋กœ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
CSS in JS๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์Šคํƒ€์ผ์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๊ณ , ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์Šคํƒ€์ผ์„ ๋”์šฑ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ ์šฉํ•˜๋ฏ€๋กœ์จ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๐ŸŽ€ CSS in JS ์™€ ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ
์ผ๋ฐ˜์ ์œผ๋กœ CSS in JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ์™€ ๋กœ์ง์„ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž์ฒด CSS ํ•ด์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด CSS ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๋“ค์–ด๊ฐ€ ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง‘๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ํฌ๊ธฐ์˜ ์ฆ๊ฐ€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ๋ฏธํ•œ ํŽธ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ CSS in JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์ธ CSS ์ฝ”๋“œ๋ณด๋‹ค ์ ์€ ์šฉ๋Ÿ‰์„ ์ฐจ์ง€ํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰, ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์•ฝ๊ฐ„ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์ด๊ณ , ์ด๋ฅผ ์ƒ์‡„ํ•  ์ด์ ์ด ๋”์šฑ ๋งŽ์Šต๋‹ˆ๋‹ค.

๐Ÿ’š CDD ๊ฐœ๋ฐœ ๋„๊ตฌ

Styled Components

๐Ÿ” Styled Components ๋ž€?
React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋ง์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๋ชจ๋“ˆํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. Styled Components๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JS ์ฝ”๋“œ ์•ˆ์—์„œ CSS ์Šคํƒ€์ผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ€ Styled Components ์˜ ํŠน์ง•
1. CSS-in-JS : Styled Components๋Š” JavaScript ํŒŒ์ผ ์•ˆ์—์„œ CSS ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ CSS in JS ๊ฐœ๋…์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋ง๊ณผ ๊ด€๋ จ๋œ JS์™€ CSS ์ฝ”๋“œ๋ฅผ ํ•œ๋ฐ ๋ชจ์•„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2. ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ์Šคํƒ€์ผ๋ง : ์Šคํƒ€์ผ์ด ๋ชจ๋‘˜ํ™” ๋˜๊ณ , ์ปดํฌ๋„ŒํŠธ ๋ณ„๋กœ ์Šคํƒ€์ผ๋ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3. ๋™์ ์Šคํƒ€์ผ๋ง : ๋™์ ์œผ๋กœ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” React์˜ State๋‚˜ Props ๊ฐ’์„ ํ™œ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
4. CSS ๋ณ€์ˆ˜ : ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์Šคํƒ€์ผ ๊ฐ’๋“ค์„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์Šคํƒ€์ผ๋ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šค๋นˆ๋‹ค.
5. ํ…Œ๋งˆ ์ง€์› : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์ ์ธ ์Šคํƒ€์ผ๋ง์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Styled Components๋Š” CSS in JS ๋ผ๋Š” ๊ฐœ๋…์ด ๋Œ€๋‘๋˜๋ฉด์„œ ๋‚˜์˜จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ํ˜„์žฌ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. CSS๋ฅผ ์ปดํฌ๋„ŒํŠธํ™” ์‹œ์ผœ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ด๋ฅผ ์‚ฌ์šฉํ•ด CSS๋„ ์‰ฝ๊ฒŒ JavaScript ์•ˆ์— ๋„ฃ์–ด์ฃผ์–ด HTML + CSS + JS๋ฅผ ๋ฌถ์–ด ํ•˜๋‚˜์˜ JS ํŒŒ์ผ ์•ˆ์—์„œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐ŸŽ€ Styled Components ์„ค์น˜

  • npm install --save sytled-components
  • package.json์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€
    {
    "resolutions" : {
      "styeld-components" : "^5"
    }}
  • import styeld from "styeld-components"๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉ

Styled Components ๋ฌธ๋ฒ•

  1. ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ
  • const ์ปดํฌ๋„ŒํŠธ๋ช… = ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
  • ์„ ์–ธ ํ›„ ํ…œํ”Œ๋ฆฟ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. styled.ํƒœ๊ทธ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋ฐฑํ‹ฑ(`)์•ˆ์— CSS๋ฌธ๋ฒ•๊ณผ ๋˜‘๊ฐ™์ด ์Šคํƒ€์ผ ์†์„ฑ์„ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋“ฏ ๋ฆฌํ„ด๋ฌธ ์•ˆ์— ์ž‘์„ฑํ•ด์ฃผ๋ฉด ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
  1. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌํ™œ์šฉํ•ด์„œ ์ƒˆ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ  styled()์— ์žฌํ™œ์šฉํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „๋‹ฌํ•ด ์ค€ ๋‹ค์Œ, ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์Šคํƒ€์ผ ์†์„ฑ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Props ํ™œ์šฉํ•˜๊ธฐ
    React ์ปดํฌ๋„ŒํŠธ์ฒ˜๋Ÿผ Props๋ฅผ ๋‚ด๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ ค์ค€ ๊ฐ’์— ๋”ฐ๋ผ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ๋ฆฌํ„ฐ๋Ÿด ${}์„ ์‚ฌ์šฉํ•ด Props๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • Props ๋กœ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋งํ•˜๊ธฐ
    ์Šคํƒ€์ผ์„ ์กฐ๊ฑด๋ถ€๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    //EX
    const Button = styled.button`
    	background : ${(props) => props.red ? "red" : "white"}
    `; // ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋ฐ›์•„์˜จ ๊ฐ’์ด ๋ ˆ๋“œ๋ฉด ๋ ˆ๋“œ๋กœ, ์•„๋‹ˆ๋ฉด ํ™”์ดํŠธ๋กœ ์ง€์ •ํ•ด์ฃผ๋Š” ์ฝ”๋“œ
  • Props ๊ฐ’์œผ๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ

    const Button = styled.button`
    	backgroun : ${(props) => props.color ? props.color : "white"}
    `; // props.color ์œ ๋ฌด์— ๋”ฐ๋ผ ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ๋ฆฌํ„ดํ•ด์ฃผ๊ณ  ์•„๋‹ˆ๋ฉด ํ™”์ดํŠธ๋กœ ์ง€์ •ํ•˜๋Š” ์ฝ”๋“œ
  • ๊ผญ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  JS ์ฝ”๋“œ๋ผ๋ฉด ๋ฌด์—‡์ด๋“  ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  1. ์ „์—ญ ์Šคํƒ€์ผ ์„ค์ •ํ•˜๊ธฐ (์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•„๋‹Œ ์ „์—ญ ์Šคํƒ€์ผ์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ)
// ์šฐ์„  `createGlobalStyle` ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
import { createGlobalStyle } from "styled-components"

//๋ถˆ๋Ÿฌ์˜จ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์„ค์ •ํ•ด์ฃผ๊ณ  ์‹ถ์€ ์Šคํƒ€์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
const GlobalStyle = createGlobalStyle`
	button {
		padding : 5px;
		margin : 2px;
	}
`

//๋งŒ๋“  <GlobalStyle> ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•ด์ค๋‹ˆ๋‹ค.
function App() {
  return (
    <>
    	<GlobalStyle />
    	<Button> ์ „์—ญ๋ฒ„ํŠผ </Button>
    </>
  );
}

StoryBook

CDD๋ฅผ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ๋กœ Component Explorer(์ปดํฌ๋„ŒํŠธ ํƒ์ƒ‰๊ธฐ)๊ฐ€ ๋“ฑ์žฅํ–ˆ๊ณ , ๋‹ค์–‘ํ•œ UI ๊ฐœ๋ฐœ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ StoryBook ์ž…๋‹ˆ๋‹ค.

๐Ÿ” StoryBook ์ด๋ž€?
UI ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋กœ, React, Vue, Angular ๋“ฑ์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. StoryBook ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์€ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐœ๋ณ„์ ์ธ ๊ธฐ๋Šฅ๊ณผ UI ๋””์ž์ธ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋””์ž์ธ, ๋ ˆ์ด์•„์›ƒ, ๋กœ์ง ๋“ฑ์„ ๋ชจ๋‘ ๋™์‹œ์— ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.
StoryBook์€ ๋‹ค์–‘ํ•œ ์Šคํ† ๋ฆฌ๋ถ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๊ตฌ์„ฑ์š”์†Œ์˜ ์‹œ๊ฐ์  ๋ชจ์Šต ๋ฐ ๋™์ž‘์„ ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋‚˜ ๋””์ž์ด๋„ˆ๋“ค์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์–‘ํ•œ ์• ๋“œ์˜จ๊ณผ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ๋งž์ถ”์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋กœ ๋‹ค์–‘ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์‚ฌ์šฉ์ž๋“ค์˜ ํ”ผ๋“œ๋ฐฑ๊ณผ ๊ธฐ์—ฌ๋ฅผ ๋ฐ›์œผ๋ฏ€๋กœ, ์ง€์†์ ์ธ ๊ฐœ์„ ๊ณผ ๋ฐœ์ „์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์–ด ๋” ๋‚˜์€ UI ๊ฐœ๋ฐœ๊ฒฝํ—˜์„ ๋•์Šต๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋”ฐ๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑํ•ด์ฃผ์–ด ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์–ด ์ „์ฒด UI๋ฅผ ํ•œ ๋ˆˆ์— ๋ณด๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

StoryBook์€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ™•๋Œ€ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ , ์ž๋™์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ „์— ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋„๋ก ๋„์™€์ฃผ๊ณ  ํ…Œ์ŠคํŠธ ๋ฐ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์žฅ์ ์ด ์žˆ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜ํ•œ ์˜์กด์„ฑ์„ ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

StoryBook์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋…๋ฆฝ์ ์ธ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  UI์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ณ , ํšŒ์‚ฌ์˜ ๋‚ด๋ถ€ ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•ด ๋ฌธ์„œํ™” ํ•˜์—ฌ ํšŒ์‚ฌ UI๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์™ธ๋ถ€ ๊ณต๊ฐœ์šฉ ๋””์ž์ธ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ํ”Œ๋žซํผ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ

  1. UI ์ปดํฌ๋„ŒํŠธ๋“ค ์นดํƒˆ๋กœ๊ทธํ™”

  2. ์ปดํฌ๋„ŒํŠธ ๋ณ€ํ™”๋ฅผ Stories๋กœ ์ €์žฅ

  3. ํ•ซ ๋ชจ๋“ˆ ๋ฆฌ๋กœ๋”ฉ๊ณผ ๊ฐ™์€ ๊ฐœ๋ฐœ ํˆด ๊ฒฝํ—˜ ์ œ๊ณต

    ๐ŸŽ€ ํ•ซ ๋ชจ๋“ˆ ๋ฆฌ๋กœ๋”ฉ(Hot Module Reloading)
    ์›น ๊ฐœ๋ฐœ์—์„œ ์ฝ”๋“œ ์ˆ˜์ • ์‹œ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ฆฌ๋กœ๋”ฉํ•˜์ง€ ์•Š๊ณ ๋„ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ ๋ถ€๋ถ„๋งŒ ๋น ๋ฅด๊ฒŒ ์ ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ณ , ์ƒˆ๋กœ๊ณ ์นจ์— ์˜ํ•œ ์‹œ๊ฐ„ ๋‚ญ๋น„๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ๋ณดํ†ต ์›นํŒฉ๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์›นํŒฉ์€ ํ•ซ ๋ชจ๋“ˆ ๋ฆฌ๋กœ๋”ฉ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ์†Œ์Šค ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ , ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋กœ๋”ฉํ•˜์—ฌ ์ ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ๋” ๋น ๋ฅธ ๋ฐ˜์‘์„ฑ์„ ํ™•๋ณด์ผ€ ํ•ด์ค๋‹ˆ๋‹ค.

  4. ๋ฆฌ์•กํŠธ๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ๋ทฐ ๋ ˆ์ด์–ด ์ง€์›

StoryBook ์„ค์น˜

์šฐ์„  ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. (npx create-react-app ํ”„๋กœ์ ํŠธ๋ช…)
ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํด๋” ์•ˆ์—์„œ Storybook์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
npx storybook init -> package.json์„ ๋ณด๊ณ  ์‚ฌ์šฉ์ค‘์ธ ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋งž๋Š” ์‚ฌ์šฉํ™˜๊ฒฝ์šธ ์•Œ์•„์„œ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด storybookํด๋”์™€, /src/storiesํด๋”๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

npm run storybook์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -> localhost:6006์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

๐Ÿ‘€ ์ด ๋•Œ ์‹คํ–‰์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค๋ฉด
npm i @testing-library/dom์„ ์ž…๋ ฅํ•œ ํ›„ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

storybook ์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š์•„๋„ ์ƒํƒœ๋ณ€ํ™”์— ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ๋ช….jsํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ๋ช….stories.js๋ฅผ ๋งŒ๋“ค๋ฉด storybookํด๋” ์•ˆ์— ์žˆ๋Š” Storybook์„ค์ • ํŒŒ์ผ์— ์˜ํ•ด ์•Œ์•„์„œ ์Šคํ† ๋ฆฌ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’š useRef

๐Ÿ” useRef ๋Š”?
๋ฆฌ์•กํŠธ์˜ Hook ์ค‘ ํ•˜๋‚˜๋กœ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•ด DOM ๋…ธ๋“œ๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ์ปดํฌ๋„ŒํŠธ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ state์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ตœ์ ํ™”๋‚˜ ์„ฑ๋Šฅ๊ฐœ์„ ์—๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
๋ณดํ†ต useEffect์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, useEffect ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋œ DOM ์š”์†Œ๋‚˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ณ , useRef๋Š” ์ตœ์ดˆ ๋ Œ๋”๋ง ์ดํ›„์—๋„ ๋ณ€์ˆ˜๋‚˜ DOM ์š”์†Œ์˜ ๊ฐ’์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜์–ด๋„ ๊ฐ’์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ผ๋ฐ˜์ ์ธ state์™€ ๋‹ฌ๋ฆฌ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆฌ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐ŸŽ€ useRef๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ
ํฌ์ปค์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ์–ด๋–ค DOM ์š”์†Œ์˜ ํฌ๊ธฐ๋‚˜ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•œ ๋™์ž‘์„ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

DOM ์—˜๋ฆฌ๋จผํŠธ ์ฃผ์†Œ๊ฐ’์„ ํ™œ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, React๋กœ ๋ชจ๋“  ๊ฐœ๋ฐœ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์—์„œ useRef๋กœ DOM๋…ธ๋“œ, ์—˜๋ฆฌ๋จผํŠธ, React ์ปดํฌ๋„ŒํŠธ ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const ์ฃผ์†Œ๊ฐ’์„_๋‹ด๋Š”_๊ทธ๋ฆ‡ = useRef(์ฐธ์กฐ์ž๋ฃŒํ˜•)
// ์ด์ œ ์ฃผ์†Œ๊ฐ’์„_๋‹ด๋Š”_๊ทธ๋ฆ‡ ๋ณ€์ˆ˜์— ์–ด๋–ค ์ฃผ์†Œ๊ฐ’์ด๋“  ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
return (
    <div>
      <input ref={์ฃผ์†Œ๊ฐ’์„_๋‹ด๋Š”_๊ทธ๋ฆ‡} type="text" />
        {/* React์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ref๋ผ๋Š” ์†์„ฑ์— ์ฃผ์†Œ๊ฐ’์„_๋‹ด๋Š”_๊ทธ๋ฆ‡์„ ๊ฐ’์œผ๋กœ ํ• ๋‹นํ•˜๋ฉด*/}
        {/* ์ฃผ์†Œ๊ฐ’์„_๋‹ด๋Š”_๊ทธ๋ฆ‡ ๋ณ€์ˆ˜์—๋Š” input DOM ์—˜๋ฆฌ๋จผํŠธ์˜ ์ฃผ์†Œ๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค. */}
        {/* ํ–ฅํ›„ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ input DOM ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. */}
    </div>);

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋” ๋˜๋”๋ผ๋„ ์œ„์˜ ์ฃผ์†Œ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ํ™œ์šฉํ•ด ์ œํ•œ๋œ ์ƒํ™ฉ์—์„œ useRef๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ€ useRef ๋ฅผ ์‚ฌ์šฉํ•ด DOM์„ ์กฐ์ž‘ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ state๋‚˜ props๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ 'forceUpdate'ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ๊ฐ•์ œ๋กœ ๋ฆฌ๋ Œ๋”๋ง์„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— React ๋ฌธ๋ฒ•์„ ๋ฒ—์–ด๋‚˜ useRef๋ฅผ ๋‚จ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.




profile
๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์–ด ๋‘ฅ๋‹น๋‘ฅ๋‹น

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด