๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
React

[React] Coin Tracker - ๊ฐ’ ์–‘์ˆ˜, ์Œ์ˆ˜ ์ƒ‰์ƒ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚ด๊ธฐ

by vividmin 2022. 5. 26.
320x100

 

๊ตฌํ˜„ํ•˜๊ฒŒ ๋œ ์ด์œ ?

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

 

Math.sign( ) โ“
 ์ฃผ์–ด์ง„ ์ˆ˜์˜ ๋ถ€ํ˜ธ(+/-)๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜. ๋‹จ ์ œ๊ณตํ•œ ์ˆ˜๊ฐ€ 0์ด๋ผ๋ฉด +0/-0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๊ฐ’์ด ์–‘์ˆ˜ : 1์„ ๋ฐ˜ํ™˜
  • ๊ฐ’์ด ์Œ์ˆ˜ : -1์„ ๋ฐ˜ํ™˜
  • ๊ฐ’์ด ์–‘์˜ 0 : 0์„ ๋ฐ˜ํ™˜
  • ๊ฐ’์ด ์Œ์˜ 0 : -0์„ ๋ฐ˜ํ™˜
  • ์ด์™ธ์˜ ๊ฒฝ์šฐ NaN์„ ๋ฐ˜ํ™˜

์˜ˆ์‹œ ์ฝ”๋“œ

console.log(Math.sign(3));	// 1
console.log(Math.sign(-5));	// -1
console.log(Math.sign(0));	// 0
console.log(Math.sign('-3')	// -1

๐Ÿ‘‰๐Ÿป ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ Math.sign(x) ์•ˆ์˜ x๊ฐ€ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ์–ด๋„ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ถ€ํ˜ธ๋ฅผ ํŒ๋‹จํ•ด์ค€๋‹ค.

์ถœ์ฒ˜ : mdnํŽ˜์ด์ง€

 

์‹คํŒจ ๊ณผ์ • ๐Ÿ˜–

์ฒ˜์Œ์—๋Š” ๋‹ต๋ณ€์—์„œ ๋ณธ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ api๋กœ ๋ฐ›์•„ ์˜จ ์ƒ‰์ƒ์„ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•˜๋Š” ๊ฐ€๊ฒฉ ๊ฐ’์„ Math.sign์œผ๋กœ ๊ฐ์‹ธ๊ณ  ์•ž์— !! ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด์„œ true, false๋ฅผ ๋‚˜๋ˆ„์–ด styled-component์— ์ „๋‹ฌํ•ด์ฃผ๋ ค๊ณ  ํ–ˆ๋‹ค.

!!(Math.sign(ํŒ๋‹จ ๊ฐ’));

๊ทธ๋Ÿฐ๋ฐ ๋ง‰์ƒ ํ•ด๋ณด๋‹ˆ๊นŒ ๊ฐ’๋“ค์˜ ์ƒ‰์ด ์ „๋ถ€ ์–‘์ˆ˜์ผ ๋•Œ์˜ ์ƒ‰์ƒ์ธ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ๋งŒ ๋‚˜์™”๋‹ค.๐Ÿ˜ฐ


๋ญ”๊ฐ€ ์ด์ƒํ•ด์„œ ๊ฐ’์„ ์ฝ˜์†”์— ์ฐ์–ด๋ณด๋‹ˆ ์ƒ์Šน ๊ฐ€๊ฒฉ์€ +1๋กœ ํŒ๋‹จ๋˜์–ด true๋กœ ์ž˜ ๋‚˜์˜ค๋Š”๋ฐ, ํ•˜๋ฝ ๊ฐ€๊ฒฉ์€ -1๋กœ ํŒ๋‹จ๋˜์ง€๋งŒ -1 ๋˜ํ•œ true์ด๋ฏ€๋กœ true / false ๊ตฌ๋ถ„์ด ๋˜์ง€ ์•Š์•˜๋‹ค.
๊ทธ๋Ÿฌ๋‹ˆ ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์ƒ์Šน, ํ•˜๋ฝ ๋ชจ๋‘ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ๋งŒ ๋‚˜์™”๋˜ ๊ฒƒ์ด๋‹ค. ์ด ๋ฐฉ๋ฒ• ๋ง๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์จ์•ผ ํ–ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ๋Š” ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ์—๋Š” +1์„ ๋”ํ•ด์„œ 0์„ ๋งŒ๋“  ํ›„ false๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ, ์ผ๋‹จ ๊ฐ’์ด ์Œ์ˆ˜์ธ ๊ฒฝ์šฐ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ณผ์ •์—๋‹ค๊ฐ€ ๋‹ค์‹œ +1์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•˜๋‹ค๋Š” ํŒ๋‹จ์ด ๋“ค์—ˆ๋‹ค.

 

์ตœ์ข… ์ ์šฉ ๋ฐฉ๋ฒ• ๐Ÿ‘€

๊ฐ’์˜ ์Œ์ˆ˜ ์–‘์ˆ˜ ์—ฌ๋ถ€๋Š” ๊ทธ๋Œ€๋กœ Math.sign( )์œผ๋กœ ํŒ๋ณ„ํ•˜๊ฒŒ ํ•˜๊ณ , ๋Œ€์‹  checkBooleanํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ ์ˆซ์ž ๊ฐ’์„ isPositive๋ผ๋Š” ์†์„ฑ์ด true or false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.
- ๊ฐ’์ด 1์ด๋ฉด ๊ทธ๋Œ€๋กœ true
- ๊ฐ’์ด 1 ์ด์™ธ์˜ ๊ฐ’ (-1, 0)์ด๋ฉด false

๋งˆ์ง€๋ง‰์œผ๋กœ styled-component๋ฅผ ํ†ตํ•ด์„œ props์˜ ๊ฐ’์„ isPositive์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

// styled component ์ ์šฉ
const PriceValue = styled.span<IItemProps>`
  color: ${(props) =>
    props.isPositive ? props.theme.upwardColor : props.theme.downwardColor};
`;

// checkBoolean ํ•จ์ˆ˜
function checkBoolean(value: number) {
  if (Math.sign(value) === 1) {
    return true;
  } 
  else {
    return false;
  }
}

// ๊ฐ’ ํŒ๋‹จํ•˜๊ธฐ
<PriceValue
  isPositive={checkBoolean(BaseUrl.percent_change_30m)}
>
	{`${BaseUrl.percent_change_30m} %`}
</PriceValue>

์ด์ œ ์ •์ƒ์ ์œผ๋กœ ์ ์šฉ๋œ๋‹ค!!๐Ÿ™Š
์•„๋งˆ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ง€๊ธˆ ์•Œ๊ณ  ์žˆ๋Š” ์ง€์‹์œผ๋กœ๋Š” ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ธ ๋“ฏํ•˜๋‹ค.
๋‚˜์ค‘์— ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋œ๋‹ค๋ฉด ๋”ฐ๋กœ ํฌ์ŠคํŒ…ํ•ด์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•

'React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React ํ”„๋กœ์ ํŠธ githubPages๋กœ ๋ฐฐํฌํ•˜๊ธฐ  (0) 2022.06.20

๋Œ“๊ธ€