[React] Coin Tracker - κ° μμ, μμ μμ λ€λ₯΄κ² λνλ΄κΈ°
ꡬννκ² λ μ΄μ ?
λ
Έλ§λμ½λ μ±λ¦°μ§λ₯Ό λμ νλ μ€μ μ£Όμμ΄λ μ½μΈ μ±μμ 보μ΄λ―μ΄ κ°κ²©μ΄ μ¬λΌκ°λ©΄ λΉ¨κ°μμΌλ‘ λ΄λ €κ°λ©΄ νλμμΌλ‘ νμλ₯Ό ν΄λ³΄κ³ μΆμ΄μ‘λ€.
μ΄λ€ λ°©λ²μ μ°λ©΄ μ’μμ§ κ΅¬κΈλ§μ ν΄λ³΄λ€κ° μ μ ν λ°©λ²μ΄ μμ΄μ κ³ λ―Όνλ μ€ 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>
μ΄μ μ μμ μΌλ‘ μ μ©λλ€!!π
μλ§ λ λμ λ°©λ²μ΄ μμ μλ μμ§λ§, μ§κΈ μκ³ μλ μ§μμΌλ‘λ μ΄ λ°©λ²μ΄ μ΅μ μΈ λ―νλ€.
λμ€μ λ λμ λ°©λ²μ μκ² λλ€λ©΄ λ°λ‘ ν¬μ€ν
ν΄μΌκ² λ€.