[ReactJS] 리액트로 분/시간, Km/Miles 변환기 만들기

2022. 10. 5. 22:34·ReactJS

HTML 코드

<!DOCTYPE html>
<html lang="en">
  <head></head>
  <body>
    <div id="root"></div>

    <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

  </body>
</html>

아래는 리액트 코드

      <script type="text/babel">
      function MinutesToHours() {
        const [amount, setAmount] = React.useState(0);
        const [flipped, setFlipped] = React.useState(false);
        const onChange = (event) => {
          setAmount(event.target.value);
        };
        const reset = () => setAmount(0);
        const onFlip = () => {
          reset();
          // 현재의 값을 반대로 바꿔줌
          setFlipped((current) => !current);
        };
        return (
          <div>
            <div>
              <label htmlFor="minutes">Minutes</label>
              <input
                // 외부에서도 input의 값을 수정해주기위해 이렇게 연결함. ex) reset
                value={flipped ? amount * 60 : amount}
                id="minutes"
                placeholder="Minutes"
                type="number"
                onChange={onChange}
                disabled={flipped}
              />
            </div>
            <div>
              <label htmlFor="hours">Hours</label>
              <input
                value={flipped ? amount : Math.round(amount / 60)}
                id="hours"
                placeholder="Hours"
                type="number"
                disabled={!flipped}
                onChange={onChange}
              />
            </div>
            <button onClick={reset}>Reset</button>
            <button onClick={onFlip}>{flipped ? "Turn back" : "Invert"}</button>
          </div>
        );
      }
      
      function KmToMiles() {
        const [amount, setAmount] = React.useState(0);
        const [flipped, setFlipped] = React.useState(false);
        const onChange = (event) => {
          setAmount(event.target.value);
        };
        const reset = () => setAmount(0);
        const onFlip = () => {
          reset();
          // 현재의 값을 반대로 바꿔줌
          setFlipped((current) => !current);
        };
        return (
          <div>
            <div>
              <label htmlFor="km">Km</label>
              <input
                // 외부에서도 input의 값을 수정해주기위해 이렇게 연결함. ex) reset
                value={flipped ? amount / 1000 : amount}
                id="km"
                placeholder="km"
                type="number"
                onChange={onChange}
                disabled={flipped}
              />
            </div>
            <div>
              <label htmlFor="miles">Miles</label>
              <input
                value={flipped ? amount : amount * 1000}
                id="miles"
                placeholder="miles"
                type="number"
                disabled={!flipped}
                onChange={onChange}
              />
            </div>
            <button onClick={reset}>Reset</button>
            <button onClick={onFlip}>{flipped ? "Turn back" : "Invert"}</button>
          </div>
        );
      }

      function App() {
        const [index, setIndex] = React.useState();
        const onSelect = (event) => {
          setIndex(event.target.value);
        };
        return (
          <div>
            <h1>Super Converter</h1>
            <select value={index} onChange={onSelect}>
              <option value="xx">Select your units</option>
              <option value="0">Minutes & Hours</option>
              <option value="1">Km & Miles</option>
            </select>
            {index === "xx" ? "Please select your units" : null}
            {index === "0" ? <MinutesToHours /> : null}
            {index === "1" ? <KmToMiles /> : null}
          </div>
        );
      }
      const root = document.getElementById("root");
      ReactDOM.render(<App />, root);
      </script>

'ReactJS' 카테고리의 다른 글

[React] 컴포넌트와 렌더링  (0) 2022.11.30
[React] ref란? (feat. DOM API를 쓰면 안되는 이유)  (0) 2022.11.30
[ReactJS] useEffect, Cleanup  (0) 2022.10.07
[ReactJS] props, memo  (0) 2022.10.06
[ReactJS] useState  (0) 2022.09.26
'ReactJS' 카테고리의 다른 글
  • [React] ref란? (feat. DOM API를 쓰면 안되는 이유)
  • [ReactJS] useEffect, Cleanup
  • [ReactJS] props, memo
  • [ReactJS] useState
youjeong_choi
youjeong_choi
  • youjeong_choi
    youjeong
    youjeong_choi
  • 전체
    오늘
    어제
    • 분류 전체보기 (101)
      • HTML, CSS (7)
      • JavaScript (19)
        • 모던 자바스크립트 딥다이브 (4)
      • ReactJS (17)
      • TIL (15)
      • WIL (17)
      • 알고리즘 (17)
      • 네트워크 (5)
      • Vue (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리액트 라이프 사이클
    항해99주특기리액트
    익명 함수
    항해99 실전프로젝트
    항해99리액트
    피니아
    파이썬
    무한렌더링
    알고리즘 문제
    항해99주특기
    모던자바스크립트딥다이브
    선언적 함수
    자바스크립트
    리액트
    혼공스
    알고리즘
    항해99 주특기
    항해99리액트숙련주차
    리액트 라우트
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
youjeong_choi
[ReactJS] 리액트로 분/시간, Km/Miles 변환기 만들기
상단으로

티스토리툴바