๐Ÿš€React ์ฑŒ๋ฆฐ์ง€ Day8

westZeroยท2023๋…„ 6์›” 28์ผ
2

JS & ๋ฆฌ์•กํŠธ ์ฑŒ๋ฆฐ์ง€

๋ชฉ๋ก ๋ณด๊ธฐ
8/10
post-thumbnail

TIL day7 ๐Ÿšฉ

์ „์ฒด์ ์ธ ํ”„๋กœ์„ธ์Šค์— ์ง‘์ค‘ํ•˜์ž! ์ „ ๋น„ํŠธ์ฝ”์ธ ์•ˆํ•˜๋Š”๋ฐ์š”....

์˜ค๋Š˜์€ ๋‹ˆ๊ผฌ์Œค๊ณผ ํ•จ๊ป˜ ๋น„ํŠธ์ฝ”์ธ tracker์„ ๋งŒ๋“ค๊ธฐ๋กœํ–ˆ๋‹ค.

์ผ๋‹จ ๋งŒ๋“ค์–ด๋ณด์•˜์Œ๋‹ˆ๋‹ค..

coin tracker๋งŒ๋“ค๊ธฐ!

import { useEffect, useState } from "react";

function App() {
  const [loading, setLoading] = useState(true);
  const [coins, setCoins] = useState([]);
  const [myMoney, setMyMoney] = useState([]);
  // ์—ฌ๊ธฐ๋ฅผ ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด๋กœ ๋‘์–ด์„œ undefied๊ฐ€ ๋˜์ง€์•Š๋„๋กํ•œ๋‹ค.
  useEffect(() => {
    fetch("https://api.coinpaprika.com/v1/tickers")
      .then((response) => response.json())
      .then((json) => setCoins(json));
     setLoading(false);
  }, []); //์ด ๋ถ€๋ถ„์ด ๋นˆ ๋ฐฐ์—ด์ด๋ฉด ์ด ์ฝ”๋“œ๋Š” ํ•œ๋ฒˆ๋งŒ ๋™์ž‘ํ•จ
  
 
  function onChange(event) {
    setMyMoney(event.target.value);
  }
  return (
    <div>
      <h1>The Coins!{loading ? "" : `(${coins.length})`}</h1>
      <input
        onChange={onChange}
        value={myMoney}
        type="number"
        placeholder="Please Write your USD"
      ></input>
      {loading ? (
        <strong>loading...</strong>
      ) : (
        <select>
          {coins.map((coin) => (
            <option>
              {coin.rank} ::
              {coin.name} ({coin.symbol}) <br />(
              {coin.total_supply}{" "}
              : $
              {coin.quotes.USD.price
                }
              )USD /
              {myMoney
                ? (myMoney / coin.quotes.USD.price)
                    
                : ""}
            </option>
          ))}
          ;
        </select>
      )}
    </div>
  );
}
export default App;

์ผ๋‹จ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ input์— ๋น„ํŠธ์ฝ”์ธ์œผ๋กœ ๋ฐ”๊พธ๊ณ ์‹ถ์€ ๋‹ฌ๋Ÿฌ์˜ ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๋ผ๊ณ  ํ•ด์„œ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ ..
๋„๋ฌด์ง€ ๋„๋ฌด์ง€!! ์–ด๋–ป๊ฒŒ ๋„ฃ์–ด์•ผํ• ์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•˜๋‹ค..
ํ•ญ์ƒ ์ˆ˜๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด์„œ์ผ๊นŒ..
๊ฒฐ๊ตญ ๋‹ค๋ฅธ ์ˆ˜๊ฐ•์ƒ๊บผ ์นดํ”ผํ•จ

๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋‹ค๋ณด๋‹ˆ ์†Œ์ˆซ์ ๊ณผ ์ž๋ฆฟ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๊ฑฐ์Šฌ๋ ค์„œ ์†Œ์ˆซ์  ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

react์—์„œ ์†Œ์ˆซ์  ์ •๋ฆฌํ•˜๊ธฐ

import { useEffect, useState } from "react";

function App() {
  const [loading, setLoading] = useState(true);
  const [coins, setCoins] = useState([]);
  const [myMoney, setMyMoney] = useState([]);
  //์—ฌ๊ธฐ๋ฅผ ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด๋กœ ๋‘์–ด์„œ undefied๊ฐ€ ๋˜์ง€์•Š๋„๋กํ•œ๋‹ค.
   useEffect(() => {
     fetch("https://api.coinpaprika.com/v1/tickers")
       .then((response) => response.json())
       .then((json) => setCoins(json));
     setLoading(false);
  }, []); //์ด ๋ถ€๋ถ„์ด ๋นˆ ๋ฐฐ์—ด์ด๋ฉด ์ด ์ฝ”๋“œ๋Š” ํ•œ๋ฒˆ๋งŒ ๋™์ž‘ํ•จ
 
  function onChange(event) {
    setMyMoney(event.target.value);
  }
  return (
    <div>
      <h1>The Coins!{loading ? "" : `(${coins.length})`}</h1>
      <input
        onChange={onChange}
        value={myMoney}
        type="number"
        placeholder="Please Write your USD"
      ></input>
      {loading ? (
        <strong>loading...</strong>
      ) : (
        <select>
          {coins.map((coin) => (
            <option>
              {coin.rank} ::
              {coin.name} ({coin.symbol}) <br />(
              {coin.total_supply
                .toFixed(2)
                .toString()
                .replace(/\B(?=(\d{3})+(?!\d))/g, ",")}{" "}
              : $
              {coin.quotes.USD.price
                .toFixed(2)
                .toString()
                .replace(/\B(?=(\d{3})+(?!\d))/g, ",")}
              )USD /
              {myMoney
                ? (myMoney / coin.quotes.USD.price)
                    .toFixed(2)
                    .toString()
                    .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
                : ""}
            </option>
          ))}
          ;
        </select>
      )}
    </div>
  );
}
export default App;

์ผ๋‹จ ์ด๋Ÿฐ์‹์œผ๋กœ

 {coin.quotes.USD.price
                .toFixed(2)
                .toString()
                .replace(/\B(?=(\d{3})+(?!\d))/g, ",")}

์ด๋Ÿฐ์‹์œผ๋กœ {}์•ˆ์— ์†Œ์ˆซ์  ๋‘์ž๋ฆฌ ๋’ค์—๋Š” ์ž˜๋ผ๋‚ด๊ณ  ์ฒœ๋‹จ์œ„๋กœ ๋‹จ์œ„๋ฅผ ๋Š์—ˆ๋‹ค.
.toFixed() ์ด๋ถ€๋ถ„์ด ์†Œ์ˆซ์  ๋ช‡๋ฒˆ์งธ ์ž๋ฆฌ๊นŒ์ง€ ์ž˜๋ผ๋‚ผ์ง€
.toString() ์ด๊ฑด ,ํ‘œ๋ฅผ ์ฐ๊ธฐ์œ„ํ•ด์„œ string ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
.replace(/\B(?=(\d{3})+(?!\d))/g, ",") 3์ž๋ฆฌ๋งˆ๋‹ค ๋”ฐ์›€ํ‘œ๋ฅผ ๊ธฐ๋Šฅ์ด๋‹ค.

์ถ”๊ฐ€๋กœ mymoney๊ฐ€ ๋นˆ ๊ฐ’์ผ ๋• mymoney์˜ ๊ฐ’์ด 0.0์œผ๋กœ ํ‘œ๊ธฐ๋˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ mymoney์˜ ๊ฐ’์ด ์—†์„ ๋• ๋นˆ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅ๋˜๋„๋ก if๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

loadingํ™”๋ฉด์ด ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋˜์ง€ ์•Š์„ ๋•Œ

์ด ๋ชจ๋“  ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ loadingํ™”๋ฉด์ด ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋˜์ง€ ์•Š์•„์„œ
useEffect๋ถ€๋ถ„์„ ๋‹ค์‹œ ๋ณด๋‹ˆ๊นŒ ๊ด„ํ˜ธ๋ฅผ ์ž˜๋ชป๋‹ซ์•„์„œ ๊ทธ๋Ÿฐ๊ฑฐ์˜€๋‹ค๋ฉฐ~ ๋จธ์“ฑ
ใ…Žใ…Ž

import { useEffect, useState } from "react";

function App() {
  const [loading, setLoading] = useState(true);
  const [coins, setCoins] = useState([]);
  const [myMoney, setMyMoney] = useState([]);
  // ์—ฌ๊ธฐ๋ฅผ ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด๋กœ ๋‘์–ด์„œ undefied๊ฐ€ ๋˜์ง€์•Š๋„๋กํ•œ๋‹ค.
  // useEffect(() => {
  //   fetch("https://api.coinpaprika.com/v1/tickers")
  //     .then((response) => response.json())
  //     .then((json) => setCoins(json));
  //   setLoading(false);
  // }, []); //์ด ๋ถ€๋ถ„์ด ๋นˆ ๋ฐฐ์—ด์ด๋ฉด ์ด ์ฝ”๋“œ๋Š” ํ•œ๋ฒˆ๋งŒ ๋™์ž‘ํ•จ
  useEffect(() => {
    fetch("https://api.coinpaprika.com/v1/tickers")
      .then((response) => response.json())
      .then((json) => {
        setCoins(json);
        setLoading(false); //๊ด„ํ˜ธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์•ˆ๋‹ซํ˜€์„œ setLoading์ด ์ •์ƒ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์ง€ ์•Š์•„์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•จ
      });
  }, []);
  function onChange(event) {
    setMyMoney(event.target.value);
  }
  return (
    <div>
      <h1>The Coins!{loading ? "" : `(${coins.length})`}</h1>
      <input
        onChange={onChange}
        value={myMoney}
        type="number"
        placeholder="Please Write your USD"
      ></input>
      {loading ? (
        <strong>loading...</strong>
      ) : (
        <select>
          {coins.map((coin) => (
            <option>
              {coin.rank} ::
              {coin.name} ({coin.symbol}) <br />(
              {coin.total_supply
                .toFixed(2)
                .toString()
                .replace(/\B(?=(\d{3})+(?!\d))/g, ",")}{" "}
              : $
              {coin.quotes.USD.price
                .toFixed(2)
                .toString()
                .replace(/\B(?=(\d{3})+(?!\d))/g, ",")}
              )USD /
              {myMoney
                ? (myMoney / coin.quotes.USD.price)
                    .toFixed(2)
                    .toString()
                    .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
                : ""}
            </option>
          ))}
          ;
        </select>
      )}
    </div>
  );
}
export default App;
profile
mi carro es bonito

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

comment-user-thumbnail
2023๋…„ 7์›” 2์ผ

https://melonplaymods.com/2023/06/11/furniture-mod-for-melon-playground-2/
https://melonplaymods.com/2023/06/10/one-piece-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/dump-for-melon-playground-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/radioactive-gun-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/tree-without-leaves-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/scp-foundation-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/super-marie-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/t90-a-tank-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/business-class-sedan-lorder-sidan-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/secret-laboratory-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/flower-tail-pigeon-machinery-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/rocket-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/bedroom-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/masquerade-knight-one-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/devil-fruit-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/three-trucks-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/drinks-pack-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/arta-with-reactive-armor-mod-for-melon-playground/
https://melonplaymods.com/2023/06/11/police-car-with-glow-mod-for-melon-playground/
https://melonplaymods.com/2023/06/10/swat-mod-for-melon-playground/

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ

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