๋ฐ˜์‘ํ˜•

๋ฌธ์ œ


๐Ÿ’ก ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •ํ•œ options ๊ฐ์ฒด์— size, color ์†์„ฑ์„ ๋ชจ๋‘ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ

 

์ปดํฌ๋„ŒํŠธ ํŠน์ • Prop์˜ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ์ฒด๋กœ ์ง€์ •ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฎ์–ด์“ด๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„  options ํ”„๋กญ์— size, color ์†์„ฑ์„ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •ํ–ˆ์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ size ์†์„ฑ๋งŒ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๋ฏ€๋กœ options ํ”„๋กญ์€ { size: 5 }๊ฐ€ ๋œ๋‹ค.

// ์ปดํฌ๋„ŒํŠธ ์ •์˜
function Child({ options = { size: 100, color: 'black' } }) {
  // options ํ”„๋กญ ๊ธฐ๋ณธ๊ฐ’์„ { size: 100, color: 'black' } ์œผ๋กœ ์„ค์ •
}

// ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ
return <Child options={{ size: 5 }} />;
// ํ”„๋กญ ๋„˜๊ธด ํ›„ options → { size: 5 }
// { size: 5 } ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •ํ•œ { size: 100, color: 'black' } ๊ฐ์ฒด๋ฅผ ๋ฎ์–ด์”€

 

ํ•ด๊ฒฐ


๋ฐฉ๋ฒ• 1

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•  ๊ฐ์ฒด ์†์„ฑ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘๊ณ  ๊ทธ ์™ธ ์†์„ฑ์— ์ „๊ฐœ ์—ฐ์‚ฐ์ž(Spread Syntax)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํ”„๋กญ์œผ๋กœ ๋ฐ›์€ ๊ฐ์ฒด ์†์„ฑ๋งŒ ๋ฎ์–ด์“ฐ๊ณ  ๋‚˜๋จธ์ง„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„  size ์†์„ฑ๋งŒ ๊ฐ–๋Š” options ํ”„๋กญ์„ ๋ฐ›์•˜์œผ๋ฏ€๋กœ size ์†์„ฑ๊ฐ’๋งŒ 5๋กœ ๋ฎ์–ด์“ฐ๊ณ , color: 'black' ์†์„ฑ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค.

// ์ปดํฌ๋„ŒํŠธ ์ •์˜
function Child({ options }) {
  const defaultOptions = { size: 100, color: 'black', ...options };
}

// ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ
return <Child options={{ size: 5 }} />;
// ํ”„๋กญ ๋„˜๊ธด ํ›„ defaultOptions -> { size: 5, color: 'black' }
// ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •ํ•œ color ์†์„ฑ์€ ์œ ์ง€ํ•˜๊ณ  ํ”„๋กญ์œผ๋กœ ๋„˜๊ธด size ์†์„ฑ๋งŒ ๋ณ€๊ฒฝ๋จ

 

๋ฐฉ๋ฒ• 2

๊ฐ ์†์„ฑ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹นํ•˜๋Š” ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•ด๋‘๋ฉด ๋ถ„ํ•ดํ•œ ๊ฐ’์ด undefined์ผ ๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ํ”„๋กญ์œผ๋กœ ๋„˜๊ธด options ๊ฐ์ฒด์— color ์†์„ฑ์ด ์—†๋‹ค๋ฉด, color ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •ํ•œ black์ด ํ• ๋‹น๋œ๋‹ค.

// ์ปดํฌ๋„ŒํŠธ ์ •์˜
function Child({ options }) {
  const { size = 100, color = 'black', ...rest } = options;
  console.log(size, color, rest); // 5, 'black', {}
}

// ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ
return <Child options={{ size: 5 }} />;

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•